본문 바로가기

Development/Spring Boot16

Spring AI 정식릴리즈 맛보기 (바보 ChatGPT 서비스) 기존 Spring AI의 경우, SNAPSHOT 단계여서 maven 저장소를 별도로 설정해야했다.2일전에 Spring AI 1.0 GA Released 라고 정식으로 릴리즈되서 한번 장난으로 사용해봤다.(관련 문서 : Spring AI 1.0 GA Released) Spring AI 1.0 GA 맛볼려면, 다음 문서를 참고하면 된다. (Spring AI 1.0 reference) gradle을 아래처럼 작성한 후 사용하면 된다....repositories { mavenCentral()}// 이젠 GA 릴리즈라서 mavenCentral 만 있으면 된다!...implementation 'org.springframework.ai:spring-ai-starter-model-openai' // openai를.. 2025. 5. 23.
벌써 스프링부트 4.0 이라니! 스프링 3.0이 2022년 말쯤 나왔다. 당시 아래처럼 3.0 관련된 글을 썼었다. 그리고 아직 스냅샷이긴 하지만 4.0이 Spring Initializr에 나왔다. 아직 릴리즈 노트는 작성을 다 안한 것 같다. 일단 최소 지원 자바 버전 변경이 'None' 이라 되있긴하다. 뭔가 스프링부트 3.0은 스프링이 6.0대로 바뀌면서 그거에 맞춰 3.0으로 대규모 업그레이드된 느낌이었는데, 이번 4.0에선 어떤 변화를 보여줄지 기대된다. 3.0도 초기에 나왔을 때 바로 프로젝트에도 적용해본 기억이 있어서, 이번 4.0도 스냅샷 벗어나면 바로 한번 테스트삼아 써봐야겠다. 근데 뭔가 스프링부트 2.0이 엄청 길게 유지됬다고 생각했는데, 찾아보니 2.0은 2018년이고 3.0이 2022년말이었다. 대충 4.0.. 2025. 5. 20.
자바, 스프링부트 가상스레드 도입과 관련한 짧은 개인 정리 특정 주제에 대해 짧게 생각 정리해둘 때 보통 notion을 사용했습니다.최근 블로그에 그냥 부담없이 쓰고싶을때 쓰기로 마음을 바꿨으니, 평소 노션에 적는 형태를 블로그에 적어놔도 괜찮을 것 같아서 한번 적어봅니다. 이하 자바 및 스프링부트에서의 가상스레드 사용에 대해 검색해보며 개인적으로 이런식으로 도입하면 좋겠네 싶은 부분을 생각의 흐름대로 적어봤습니다. 가상스레드 자체에 대한 설명은 적지 않았습니다. 여러 글을 읽으며 제가 정리한 생각을 적어둔거라 사실과 다를 수 있습니다. 1. 애초에 트래픽이 별로 없으면 굳이 사용할 필요 없어보임2. IO 연산이 많은 경우만 고려(네트워크 IO, 디스크 IO 등), pooling 방식으론 사용 지양3. IO 연산이 많은 구간에 넣을 때, 논블로킹 IO로 처.. 2025. 5. 15.
대강 살펴보는 자바부터 스프링부트까지의 역사 (자바, CGI, Servlet, DispatherServlet, JSP, Thymeleaf, J2EE, EJB, POJO, Hibernate, JPA, Spring Data JPA, Spring, Spring Boot) 사내 세미나로 진행한 내용을 발표 스크립트와 함께 작성한 내용 입니다. 많은 내용들을 축약하다보니 다소 정확하지 않은 내용이 포함되어 있을 수 있습니다. 설명의 흐름을 위해 연도 상관 없이 넣은 설명들이 있습니다. 보통 이런 애들은 연도를 따로 쓰지 않았습니다. 1991년 제임스 고슬링이 만들었습니다. 당시 썬 마이크로시스템즈 다녔고, 2010년에 오라클에 썬마이크로시스템즈가 인수 합병되었습니다. 그래서 요즘 오라클 사이트 들어가서 jdk 받거나 하게 된 겁니다. PHP, ASP, 펄 스크립트, C, 파이썬 등으로 CGI를 구현할 수 있습니다. 자바로도 구현 가능합니다. 일종의 스펙이므로 언어 무관하게 구현 가능합니다. 다만 단점은 요청 마다 새로운 프로세스를 생성하고, DB connection을 새로 .. 2024. 4. 18.
스프링(부트)에서 final이 아닌 필드(인스턴스 변수, 클래스 변수)가 있으면 안됩니다. 목차 이 내용은 당연한 것 같으면서도 은근히 코드리뷰할 때나 얘기할 때 한번씩 보이는 것 같아서 글로 적어보게 되었다. 개인 생각을 적은것이니 다른 의견 혹은 틀린 부분이 있으면 알려주세요. 제목을 좀 더 구체적으로 적은 이 글의 결론은 다음과 같다. 결론 스프링 혹은 스프링부트로 만든 프로젝트에서 @Component, @Controller, @Service, @Repository 와 같이 스프링 컨테이너에 등록되는 클래스에 Bean 주입 이외 용도의 필드(인스턴스 변수, 클래스 변수)가 있으면 안됩니다. 혹시 들어가야 한다면 final이어야 합니다. final 이더라도 그게 객체라면 불변임이 보장되는게 좋습니다. 물론 POJO로 된 도메인 계층 등 스프링 컨테이너에 안들어가는 애들은 상관없습니다. PO.. 2024. 4. 4.
Map에 mybatis의 map-underscore-to-camel-case가 안먹히는 이유를 알아보자 관련된 질문을 받아 이유를 찾아보기 위해 mybatis 소스를 까보게 되었다. 찾아본김에 혹시 궁금할 사람도 있을 것 같아 어느 부분에 의해 Map을 사용 시 map-underscore-to-camel-case 옵션이 안먹히는지 공유하려고 한다. map-underscore-to-camel-case 사용 이유 테이블의 칼럼명이 phone_number 이런식으로 언더바가 들어간 형태로 되어 있는 경우가 있다. 이걸 받기 위해 dto의 변수도 'String phone_number;' 처럼 언더바가 들어간 형태로 가자니 자바의 기본적인 카멜 케이스 형태랑 안맞아서 멋없다. setter도 'setPHONE_NUMBER' 이런식으로 들어가야하니 더더욱 멋없다. 그래서 String phoneNumber; / setP.. 2024. 2. 21.
Spring Initializr 에서 선택한 자바 버전은 어떤 의미일까? 목차 Spring Initializr는 자바 버전을 선택할 수 있다! 근데 알다시피 스프링 부트 3.0 부터는 자바 17 이상을 써야 하는데, Spring Initializr는 아무튼 버튼은 그대로 표출되어 있다. 이와 관련된 에러는 '스프링부트 3.0.0 프로젝트 생성시 에러 해결법' 에서 볼 수 있다. 그럼 궁금한건 그럼 저 "자바 버전을 선택하는게 어떤 의미가 있나?" 라는 부분이었다. 자바 버전을 변경하면 바뀌는 부분 스프링부트 2.7.X 버전이하일 경우 자바 버전을 바꾸면 변경되는 부분은 build.gradle의 sourceCompatibility 부분이다. 그리고 스프링부트 3.0.x 버전의 경우, 분명 3.0.0 초창기에는 Spring Initializr로 생성 시 17버전이 아니라면 저 부.. 2023. 4. 3.
스프링부트 헥사고날 아키텍쳐 코드 구조 스터디 메인 페이지 * 헥사고날 아키텍쳐를 이제 공부 시작해보는거라 틀린 내용이 있을 수 있습니다. 헥사고날 아키텍쳐 스터디를 시작했는데, 책(만들면서 배우는 헥사고날 아키텍처 설계와 구현)의 개념들이 초반부터 좀 어려웠다. 구체적인 코드를 먼저 짜보지 않고 설명만 보면 너무 이해가 더딜 것 같았다. 내 경우에 스프링부트로 프로젝트를 만들 때 사용할 아키텍쳐를 공부해보기 위해 시작한거라 책에서 설명한 헥사고날 구조가 스프링부트에 어떤식으로 적용될지부터 감이 와야 이후 내용을 진행할 수 있을거라 생각했다. 그래서 책의 내용을 보고 예상되는 코드 구조를 한번 짜봤다. 현업에서 현재 헥사고날 아키텍쳐를 적용중인 분께 여쭤보니 다행히 코드 구조 자체는 헥사고날 구조가 맞다고 들어서 만들어본 코드를 기준으로 헥사.. 2023. 2. 17.
스프링부트 3.0이상 Spring Security 기본 세팅 (스프링 시큐리티) 목차 [수정 사항] 2023-03-29 : 커스텀 어노테이션 적용하는 부분에서 소스코드에 잘못 들어간 코드가 있어서 삭제 2024-01-12 : SpringSecurityConfig 클래스의 코드에 어노테이션 빠져 있던 부분 추가 1. 시작하기 전에 1.1 설정 이해 보다는 당장 시큐리티 설정 복붙이 필요한 분들에게 이하 글에서는 import 를 제외하고 작성했고, 코드들이 글에 작성되어 있다보니 완전 초보라면 이해하기 힘들 것 같습니다. 또는 당장 급하게 복붙할 스프링 시큐리티 기본 세팅이 된 프로젝트를 찾는 경우도 있을겁니다. 그러니 우선 예시 프로젝트를 첨부합니다. 이 글은 이하의 예시 프로젝트를 만들기 위해 세팅하는 과정을 다룹니다. - 프로젝트 (스프링부트 3.0.2 기준) : github (m.. 2023. 2. 10.
스프링 부트 2.0에서 3.0 스프링 시큐리티 마이그레이션 (변경점) 목차 스프링 부트 3.0 부터 스프링 시큐리티 6.0.0 이상의 버전이 적용되었습니다. 스프링 부트 2.7.8 까지는 deprecated는 되었더라도 기존 설정대로 대부분 사용 가능했으나, 스프링 부트 3.0 부터는 아예 삭제된 부분들이 있어서 마이그레이션 시 주의할 부분(변경점)에 대해 다룹니다. - 스프링 부트 2.7 이하 스프링 시큐리티 기본 세팅 : 링크 - 스프링 부트 3.0 이상 스프링 시큐리티 기본 세팅 : 작성중 0. 스프링 시큐리티 설정 마이그레이션 예시 완전히 동일한 세팅은 아니지만, 스프링 부트 2.6 기반으로 작성된 기본 세팅 코드와 스프링 부트 3.0 기반으로 작성된 기본 세팅 코드 입니다. 이하에 나올 변경점들이 적용되어 있는걸 코드로 볼 수 있습니다.(각각 위 2.7 이하 기본.. 2023. 2. 9.