SwaggerSwagger 는 REST API 를 문서화하고, 웹 UI 를 통해서 테스트까지 할 수 있게 도와주는 도구입니다. Swagger 는 API 의 메뉴판이라는 말도 있습니다.개발자가 만든 API(서버 기능 목록) 을 정리해서 보여주며, 웹 화면으로 API 를 직접 눌러보고 테스트 할 수 있습니다.또한 문서를 따로 쓰지 않아도 코드에 따라 자동으로 만들어줍니다.즉, Swagger = API 메뉴판 + 테스트 도구 사용하는 이유 예를 들어, 개발자가 "로그인 API" 를 만들었다고 해봅시다. API 주소: POST /login요청(Request): id, password응답(Response): 200 성공, 400 실패 위와 같은 요구사항이 발생했을 때 문서로 정리를 하지 않는다면 팀원들이 헷갈..
간단한 용어설명WAS(웹 애플리케이션 서버 Tomcat, 웹 서버 + 서블릿 컨테이너 기능 제공)서블릿 컨테이너(Catalina, 서블릿을 관리하는 곳, Tomcat 이라고도 함)스프링 컨테이너(Controller, Service 등 Bean 을 관리하는 곳)서블릿(Servlet, Client 의 모든 요청을 받아서 -> 스프링이 만든 Controller 에게 배분)WARWAR(Web Application Archive) 라는 이름에서 알수가 있듯이 WAR 파일은 웹 애플리케이션 서버(WAS) 에 배포할 때 사용하는 파일입니다. JAR 파일이 JVM 위에서 실행된다면, WAR 는 웹 애플리케이션 서버(WAS) 위에서 실행됩니다.HTML 같은 정적 리소스와 클래스 파일을 모두 함께 포함하기 때문에 JAR ..
외부설정이란하나의 애플리케이션을 여러 다른 환경에서 사용해야 할 때가 있습니다.개발환경, 운영환경에 따라 URL, DB 경로등을 다양하게 설정해야 하기 때문에 외부 설정이 필요합니다. 그래서 개발용 app.jar, 운영용 app.jar 파일을 설정하는 것이 아니라 하나의 app.jar 를 개발하고 배포한 뒤에 각 환경에 맞추어 실행 시점에 외부 설정값을 주입하면 한번만 빌드해도 되고, 개발버전과 운영버전의 빌드 결과물이 같기 때문에 개발환경에서 검증되면 운영 환경에서도 믿고 사용할 수가 있습니다.유지보수하기 좋은 애플리케이션 개발의 가장 큰 기본 원칙은 변하는 것과 변하지 않는 것을 분리하는 것입니다. 외부설정방법외부 설정을 하는 방법은 일반적으로 다음 4가지 방법이 있습니다.1. OS 환경변수2. 자바..
회사에서 은행에서 쓰일 hashMap 을 구현 중 ConcurrentHashMap 을 사용할 일이 생겨 정리했습니다. ConcurrentHashMap 은 Java 에서 멀티스레드 환경에서 안전하게 사용할 수 있는 Map 자료구조입니다. ConcurrentHashMapConcurrentHashMap 은 HashMap 과 비슷한 구조인데, 여러 스레드가 동시에 접근해도 안전하게 동작하도록 만든 동기화된 Map 입니다. 이러한 ConcurrentHashMap 은 java.util.concurrent 패키지에 포함돼어 있습니다.Map map = new ConcurrentHashMap(); 왜 HashMap 을 사용하지 않는 걸까?HashMap 은 멀티스레드 환경에서 안전하지가 않습니다.두 개 이상의 스레드가 동..
Transaction Proxy, Exception 에 대해 공부하면서 정리합니다. 실무에서 @Transactional 을 붙인 메서드를 실행했는데 정상적으로 동작하지 않아 원인을 찾고 공부한 내용을 정리했습니다.트랜잭션 프록시를 만드는 이유왜 굳이 프록시를 만들어서 트랜잭션을 처리해야 할까요?@Transactional 이 붙은 메서드가 호출될 때 자동으로 트랜잭션을 시작하고, 정상 종료되면 commit, 예외가 나면 rollback 을 해주기 위해서입니다. 구체적으로 왜 프록시가 필요한지 코드를 보면 트랜잭션을 처리하려면 메서드 실행 전후로 아래와 같은 코드가 필요합니다.beginTransaction(); // 트랜잭션 시작try { targetMethod(); // 실제 로직 실행 ..
메세지화면에서 공통으로 사용되는 다양한 메세지를 한 곳에서 관리하도록 하는 기능을 메세지 기능이라고 합니다.메세지 기능을 사용하지 않을 경우 우리는 모든 메세지를 각각 하드코딩으로 입력해야 합니다. 상품 ID 상품명 가격 수량 아이템 상세를 보여주는 위 HTML 태그들에는 각각 하드코딩으로 상품ID, 상품명, 가격, 수량이 적혀있습니다.또한 해당 명칭들은 나머지 다른 많은 페이지에서 공통으로 쓰이고 있다고 할 대 기획 변경으로 상품명을 제품명으로 바꿔야 한다면 어떻게 할까요? 메세지 기능을 사용하지 않았다면 모든 소스파일에서 하나하나 상품명이라 적혀있는 곳을 찾아 제품명이라 바꿔주어야 합니다. 하지만 메세지 기능을 사용했다면 다음과 같이 메세지를 변수화 ..
Lombok이란?Lombok은 Java에서 반복적으로 작성해야 하는 보일러플레이트(boilerplate) 코드를 자동으로 생성해주는 라이브러리입니다. 이를 통해 getter/setter, toString(), equals(), hashCode(), 생성자 등의 코드를 직접 작성할 필요 없이 간결한 코드로 유지할 수 있습니다.Lombok을 사용하면 코드의 가독성이 향상되고 유지보수가 쉬워지며 컴파일 타임에 실제 메서드를 생성해주므로 성능에도 영향을 미치지 않습니다.Lombok 설정 방법Lombok 의존성 추가Lombok을 사용하려면 pom.xml(Maven) 또는 build.gradle(Gradle)에 Lombok을 추가해야 합니다.Maven 사용 시 (pom.xml) org.proje..
📌@Valid, @Validated우리가 웹사이트에서 회원가입을 할 때, 이런 걸 검사해야 합니다.✔ 이름을 입력했는지?✔ 나이가 너무 어리진 않은지?✔ 이메일 형식이 맞는지? 이런 검사를 백엔드(Spring) 에서 자동으로 해주는 게 @Valid랑 @Validated입니다.@Valid 사용법 (기본 검사)예를 들어 회원가입할 때, 이름이 비어있으면 안 되고, 나이는 18살 이상이어야 한다는 조건을 붙인다고 생각합시다.UserDTO (데이터 저장하는 클래스)import jakarta.validation.constraints.Min;import jakarta.validation.constraints.NotBlank;import jakarta.validation.constraints.NotNull;publ..