서론 평소 창의적인 사고에 대해 고민을 많이 하는 편인데, 그 과정에서 가장 중요한 요소 중 하나는 바로 "자기성찰"이라고 생각합니다. 자기성찰과 깊은 관련이 있는 학문이 바로 인문학이기에, 최근 들어 인문학 서적을 많이 찾아 읽고 있습니다. 그중 오늘 정리해보려는 책은 야마구치 슈 작가의 《철학은 어떻게 삶의 무기가 되는가》입니다. 책 표지에 적힌 "불확실한 삶을 돌파하는 50가지 생각 도구"라는 문구가 눈길을 끌었는데, 이를 보며 이 책이 철학을 우리의 일상과 사회생활에 적용해 쉽게 설명해주는 철학 입문서라는 인상을 받았습니다. 본격적인 내용에 들어가기에 앞서, 저자는 우리가 왜 철학을 알아야 하는가?에 대해 다음과 같은 네 가지 이유를 제시합니다. 1. 상황을 정확하게 통찰한다. 철학은 언제나 그 ..
전체 글
배운 것에 대한 내 생각을 가지고 정리하자이전 글에서 Spring에서 제공하는 Filter에 대해 설명했었는데요, Spring Web을 사용하게 되면, 자연스렙게 FIlter를 거치게 됩니다. [SpringBoot] Spring FIiter안녕하세요, 이번에 알아볼 주제는 Spring의 Filter입니다. Spring에서는 WEB 요청을 위한 다양한 필터가 존재하는데요,이번 시간에는 Spring에서 기본적으로 제공 해 주는 필터 종류와 필터들이 어떻게iron-jin.tistory.com Spring Security를 사용할 때, 우리는 Security에서 제공하는 여러 Filter들이 동작한다는 사실을 알고 있습니다.하지만 이 필터들은 Spring Web에서 기본적으로 등록되는 Servlet Filter들과는 동작 방식도 다르고, 등록 시점도 ..
Cookie란 HTTP 통신을 사용하는 브라우저 상에 저장되는 속성으로, 보통 서버와의 통신에 필요한 정보(세션 및 트래킹 정보 등)를 포함하고 있는 특징을 가지고 있습니다. 과거 클라이언트에 정보를 보관하는 유일한 방법이 Cookie였을 때 너무 많은 정보를 담아 서버에 전송하게 되어 발생하는 성능이슈가 있었지만, 요즘에는 LocalStorage 혹은 IndexedDB와 같은 Mordern API를 사용하여 클라이언트 정보를 저장할 수 있기 때문에 클라이언트의 모든 정보를 Cookie에 담지 않아도 정보를 효율적으로 관리할 수 있게 되었습니다.쿠키는 어떻게 생성되나?보통 쿠키는 서버에서 생성하여 응답에 추가하지만, 다음과 같이 Client-side에서도 생성이 가능합니다. 하지만, 클라이언트에서 쿠키를..
Hibernate는 ORM 방식으로 JDBC Raw 쿼리를 만들어주는 편리한 라이브러리입니다. ORM이란 무엇인가? Object-Relational Mapping의 약자로, "객체(Object)"와 “관계형 데이터(Relational Database)” 간의 데이터를 자동으로 매핑(Mapping) 해주는 기술입니다. Hibernate에서는 객체를 관계형 데이터로 자동 매핑하는 기술을 통해 객체와 레코드(Row) 를 일대일로 연결해 개발자가 SQL을 직접 작성하지 않고도 DB 데이터를 객체처럼 다룰 수 있는 기술을 제공합니다. Hbernate에서는 다음과 같이 EntityManager라는 클래스를 통해 객체를 데이터베이스에 저장(persist)하거나 데이터를 객체로 변환(load)할 수 있습니다.// 객체..
QueryDSL에서 Sub Query를 사용하기 위해서는 다음과 같이 JpaExpression을 통해 새로운 from절을 구성해야 합니다. 일반적으로, QueryDSL에서 Sub Query는 Select절고 Where절에서만 사용이 가능한 것으로 알고 있는데요, 그 이유는 무엇일까요?QDepartment department = QDepartment.department;QDepartment d = new QDepartment("d");queryFactory.selectFrom(department) .where(department.size.eq( JPAExpressions.select(d.size.max()).from(d))) .fetch(); JPQL 철학 JPQL은 Entity ..
JPA에서 Repository를 사용하기위해서는 JpaRespotiroy를 상속받아야 합니다. JpaRepository는 인터페이스 타입으로, 다음과 같이 Repository로 등록되면 안 되기 때문에 @NoRepositoryBean 어노테이션이 붙어있는 것을 확인할 수 있습니다. @NoRepositoryBeanpublic interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepository, QueryByExampleExecutor { void flush(); S saveAndFlush(S entity); List saveAllAndFlush(Iterable entities); void deleteA..
항상 일을 잘하겠다고 생각하는 것과는 달리, 제대로 수행하고 있는걸까를 생각하게 되는 순간이 많다. 또한, 주변의 일을 잘하는 사람들을 보면서 나도 저렇게 할 수 있으면 좋을텐데.. 라는 생각을 가지게 되는 순간도 많았다. 그러던 도중, 우연치않게 접하게 된 야마구치 슈 작가의 일을 잘한다는 것 저서를 읽었고, 정리해두는 것이 좋을 것 같아 이번 글을 작성하게 되었다. 머릿말기술이 중요했던 산업혁명 시대에서는 "앞으로 다가올 미래에 유용한 기술은 무엇인가?"를 접근하는 사람이 인재상에 걸맞았다고 한다. 하지만, 현재의 인재상은 단순히 기술만 아는 것이 아닌 "자신의 눈으로 세상을 똑바로 바라보면서, 무엇을 해야 하고 하지 말아야 할지 스스로 판단해 실천할 수 있는 리더십을 지닌 인물"이다. 그렇다면, ..
ToolCallback이란?이전 글에서 살펴 본 Tool Class가 사용되는 실제 클래스로 다음과 같이 Tool을 ChatClient의 Builder로 선언하게 되면, 내부적으로 ToolCallback 타입의 리스트에 추가되는 것을 알 수 있습니다. chatClient.prompt(prompt) .tools(DateTimeTools()) // 실제 사용 .call() .content(); // DefaultChatClient 내부public ChatClient.ChatClientRequestSpec tools(Object... toolObjects) { Assert.notNull(toolObjects, "toolObje..