본문 바로가기

Development46

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.
한글 초성검색 날로먹으려다 실패한 후기 발단은 이랬다. 최근 DDD책으로 유명한 최범균 작가(?)님의 신간 '주니어 백엔드 개발자가 반드시 알아야 할 실무 지식' 책이 2025-04-28 발매되었다. 그 책을 읽다가 다음과 같은 부분이 있었다. 타입이 다른 칼럼 조인 시의 주의점에 대해 적어둔 부분이다. 여기서, utf8mb4와 utf8mb4_unicode_ci 로 굳이 바꾸신 이유가 궁금해져서 찾다보니, 다음과 같은 사항을 알 수 있었다."MySQL 8.0.1 이후 default 콜레이션이 'utf8mb4_0900_ai_ci' 로 변경되었는데, 이게 한글 등의 특정 문자열 검색 처리에 문제가 있다"는 얘기였다. 우선 사실 확인을 위해 MySQL 8.0.41을 로컬에 설치해봤고, default가 utf8mb4_0900_ai_ci 가 맞음.. 2025. 5. 8.
Git 기본 이해 - 기본 명령어의 이해, 충돌 해결, github 목차   최근 git 기초에 대한 세미나 한 자료를 기반으로 글을 작성했습니다. 이 글의 목적은 아래와 같습니다.1. 기본적인 git 명령어를 이해해서 IDE가 달라지더라도 동일하게 사용할 수 있도록 하는 것2. 현재 git을 사용해 개발중인 상황에서 충돌 등이 발생했을 때, 현재 상황을 머리속으로 그려볼 수 있도록 이해하는 것   각 ppt 하단 부가 설명은 리눅스에서 CLI 환경에서 git을 사용했습니다. 이하 리눅스 명령어는 아셔야 이해할 수 있을 것 같습니다.ls : 현재 폴더내에 파일 뭐 있는지 확인vi : 그냥 메모장 같은거 실행해서 txt 파일 편집했다고 보시면 됩니다.cat : txt 파일 내용 확인했다고 보시면 됩니다.   알아두면 좋을만한 기본 명령어 외 세부적인 옵션들은 작성하지 않았.. 2024. 5. 22.
대강 살펴보는 자바부터 스프링부트까지의 역사 (자바, 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.
자바 Integer 캐싱에 대해 (Java IntegerCache, Autoboxing) 간단한 자바 문제를 만들어달라는 요청을 받았다. 장난을 섞어서 이전에 알고리즘 문제를 풀 때 이슈가 있었던 상황을 문제로 만들었다. (이하의 코드 결과는 자바 실행 시의 옵션이나 구현에 따라 달라질 수 있다. 아무런 옵션을 넣지 않고, 이하의 코드만 실행한 경우를 가정한다.) Integer a = 100; Integer b = 100; Integer c = 200; Integer d = 200; System.out.println(a == b); System.out.println(c == d); 어찌보면 당연해보이는 문제지만, 은근 주변에 시켜보면 답이 많이 다르게 나올꺼다. 1. 객체끼리의 주소값 비교이므로 false, false 라는 답변 -> 훌륭하다. 2. 에이 당연히 true, true지 -> 좀.. 2024. 2. 27.
개발자가 질문하는 방법 (회사, 상사, 커뮤니티, 개발관련 질문 등) 이번에 진행중인 디자인 패턴의 아름다움 스터디에서, 책 내용관 관련 없지만, '질문하는 방법'에 대해 얘기해보자는 토론 주제가 나왔다. 그래서 내 생각을 정리해봤다. 주의점 : 내 경험과 생각을 적어둔 것 뿐이니 정답은 아닐테고, 더 좋은 방법 역시 있을꺼다. '개발자가' 질문하는 방법이라 적어두긴 했지만, 사실 다른 업종도 비슷비슷할 것 같긴하다. 아무튼 내가 개발자니 다른 업종은 잘 몰라서 범위를 축소해 제목을 적어두었다. 내 생각에 질문할 때 들어가야 하는 내용은 다음과 같다. 1. 현재 상황 설명 2. 내가 지금까지 해본 것(모르는걸 질문하는 경우) 또는 내가 생각하는 안건(어떠한 결정 사항에 대해 질문하는 경우) 3. 내가 알고 싶은게 무엇인지 1. 현재 상황 설명 질문 시 물어보는 사람이 헷갈.. 2024. 2. 25.
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.