본문 바로가기

💻 개발/Spring19

12/11 - TIL : Validation | Spring Boot의 Validation  Spring Boot에서 Validation은 사용자의 입력 데이터를 검증하는 역할을 한다.이를 위해 컨트롤러에서 @Valid와 @Validated 어노테이션을 사용할 수 있다.두 어노테이션은 비슷해 보이지만, 사용하는 방식과 특징에서 차이가 있다. | @Valid DTO 클래스의 필드에 설정된 제약 조건(예: @NotNull, @Size, @Email 등)을 검증한다.  Spring이 아닌 Java 표준으로 제공되므로 프레임워크에 종속적이지 않다.그룹 검증(group validation)을 지원하지 않는다.예외 처리 시 : MethodArgumentNotValidException 발생. | @ValidatedSpring Framework에서 제공하는 어노.. 2024. 12. 11.
11/29 - TIL : MSA에서의 트랜잭션 모놀리식 환경에서는 일반적으로 하나의 중앙 집중식 데이터베이스를 사용하며, 이를 통해 트랜잭션 관리가 이루어진다.  하지만, MSA에서는 하나의 기능이 여러 마이크로 서비스에 걸쳐 수행된다.전체 트랜잭션이 마이크로 서비스의 물리적인 로컬 트랜잭션 여러개가 묶여서 만들어진다. 만약 일부 마이크로 서비스가 실패하면 데이터 일관성이 깨진다.  그럼 마이크로 서비스일 때는 트랜잭션을 어떻게 관리해야 할까? 마이크로 서비스일 때는 분산 트랜잭션이 필요하다. 각 서비스가 독립적인 데이터베이스를 가지고, 네트워크 지연 및 실패 가능성이 크기 때문이다.  MSA 환경에서의 트랜잭션 관리 방법에는 크게 2가지가 있다. 이 2가지 방법에 대해 알아보자. | 2PC(Two-Phase Commit)2PC는 2단계에 걸쳐서 영.. 2024. 11. 29.
11/22 - TIL : 영속성 컨텍스트와 Transaction JPA를 공부하다보면 반드시 마주하게 되는 내용은 영속성 컨텍스트와 Transaction이다.  ORM은 객체와 데이터베이스 테이블의 매핑을 통해 엔티티 클래스 객체 안에 포함된 정보를 테이블에 저장하는 기술이다.그리고 JPA는 ORM의 표준 인터페이스이다.   JPA에서 중요한 개념으로 생각되는 영속성 컨텍스트에 대해 알아보자. 영속성 컨텍스트(Persistence Context)  영속성 컨텍스트는 엔티티의 상태를 관리하는 JPA의 핵심 개념으로, 특정 트랜잭션 범위 내에서 엔티티를 메모리에 저장하고 관리한다. 데이터베이스에서 조회되거나 저장된 엔티티 객체를 캐싱해두고, 동일한 엔티티에 대한 요청이 있을 때 데이터베이스를 다시 조회하지 않도록 최적화한다. 특징 :1차 캐시 : 동일한 영속성 컨텍스트 .. 2024. 11. 22.
11/21 - TIL : Spring Bean과 DIP, DI, Interface Spring에서 중요하다고 할 수 있는게 뭐가 있을까? 그것은.. Bean이다. Spring의 핵심 철학인 DI(Dependency Injection)과 IoC(Inversion of Control)의 중심에 있는 것이 Bean이다.  Bean이 무엇이길래?!  먼저, 의존 역전 원칙(DIP : Dependency Inversion Principle), Interface, DI에 대해 우선 알아보자. DIP (Dependency Inversion Principle)DIP는 의존 역전 원칙으로 상위 수준 모듈은 하위 수준 모듈에 의존해서는 안되며, 둘 다 추상화(인터페이스)에 의존해야 한다는 것이다. 이는 추상화된 인터페이스를 통해 상호작용해야 한다는 것이다. 상위 모듈은 인터페이스에 의존 하위 모듈은 인.. 2024. 11. 21.
11/20 - TIL : Spring Cloud와 Load Balancer Spring Cloud는 Spring Framework 기반의 클라우드 네이티브 애플리케이션을 개발하기 위한 프로젝트이다. Spring Cloud는 분산 시스템에서 필요한 기능들을 추상화하여 제공하고 있으며, 마이크로서비스 아키텍처를 구현할 때 유용하게 사용된다.  주요 기능은 다음과 같다. 서비스 등록 및 디스커버리 마이크로서비스는 동적으로 확장되거나 축소되기 때문에 고정된 IP 대신 서비스 레지스트리를 통해 위치를 관리한다. 서비스 등록 : 서비스 인스턴스는 자신의 정보를 서비스 레지스트리에 등록한다. 서비스 디스커버리 : 다른 서비스가 필요한 서비스의 위치를 동적으로 조회한다. Spring Cloud에서의 구현 : Spring Cloud Netflix의 Eureka 사용 (Eureka Server .. 2024. 11. 20.
MVC Response - Spring MVC Spring MVC의 응답을 학습해보자 1) Welcome Page 스프링 부트는 정적 페이지와 템플릿 시작 페이지를 모두 지원 구성된 정적 콘텐츠 위치에서 index.html 파일을 찾음 하나라도 없으면 index 템플릿을 찾음 둘 중 하나라도 찾으면 자동으로 응용 프로그램 시작 페이지로 사용 파일 경로 resources ㄴ static ㄴ index.html or resources ㄴ templates ㄴ index.html 테스트 welcome page 설정 연습 테스트 메서드 : ResponseStaticTest.responseIndexPage 수행 방법 resources/static/hi.html을 이용해서 학습 테스트 성공시키기 welcome page 설정을 위해 적절한 위치에 이동 혹은 파일.. 2023. 12. 5.
Spring Annotation MVC - Spring MVC Spring MVC 클라이언트에서 서버로 요청을 보내기 위해서는 수많은 작업이 필요하다. 프레임워크 사용 x : 실제 비즈니스 로직보다 더 많은 부분의 코드를 작성해야 할 수 있음 프레임워크 사용 o : 부수적인 부분을 프레임워크를 통해 해소하면 개발자들은 비즈니스 로직에 좀 더 집중할 수 있음 Spring MVC 도식화 Spring MVC를 도식화하면 클라이언트와 소통하는 모듈로 설명할 수 있음 클라이언트로부터 온 요청을 처리할 로직에 따라서 처리한 후 응답을 하는 역할을 가지고 있음 기능 요청에 따라 처리 로직 분기하는 기능 요청에 담긴 정보를 객체로 사용할 수 있게 도와주는 기능 클라이언트가 필요한 형태로 응답을 만들어주는 기능 BDD 동아리 Spring 스터디 공부 자료를 참고하였습니다. 우테코의.. 2023. 12. 5.
HTTP - Spring MVC 요청과 응답 Q. 사용자가 브라우저를 통해 Nextstep 페이지에 들어가는 동안 어떤 과정을 거칠까? A. 사용자는 브라우저 주소창에 입력 Nextstep 사이트의 주소를 입력 브라우저는 주소를 인식해서 어디에 요청을 보낼지 판단하고 해당 서버에 요청을 보냄 서버는 여러 절차를 거친 뒤 요청을 한 브라우저에 요청을 받은 것을 응답 브라우저는 서버로부터 받은 정보를 이용하여 페이지를 만들어 사용자에게 보여줌 우리는 서버에 요청했다고 하고 클라이언트에 응답했다고 함 브라우저가 아니더라도 터미널로 확인 가능 (개발자 도구 이용) 서버와 클라이언트간에 어떤 요청과 응답이 오갔는지는 개발자 도구를 통해 확인 가능 내용을 살펴보면, 특별한 양식이 있는 것을 확인 가능 (해당 양식을 HTTP라고 부름) HTTP H.. 2023. 12. 4.
API Web Application 만들기 - Spring MVC 목적 클라이언트로부터 요청을 받으면 응답을 해주는 애플리케이션 만들기 GET /greeting 라는 요청을 보내면 인사말 응답 GET /greeting?name=brown 라는 요청을 보내면 name 인자를 포함한 인사말 응답 따라하기 Gradle 프로젝트 구축하기 프로젝트에 이어서 진행 Spring Web Starter 의존성 추가 지난번에 spring 프로젝트를 만들면서 추가했으므로 넘어간다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' } 관리할 객체 만들기 Greeting 코드 작성하기 lombok을 따로 설치하지 않았기 때문에 직접 필요한 함수 모두 작성하기 class 내부에 생성자를 만들어줘야 .. 2023. 12. 4.
Gradle 프로젝트 구축하기 목적 Gradle을 이용하여 프로젝트를 빌드하고 실행하기 따라하기 Gradle이 빌드할 Java 프로젝트를 설정 IntelliJ에서 New Project를 통해 프로젝트 생성 가능 Q. Gradle vs Maven New Project로 프로젝트를 생성하는 중 Gradle과 Maven의 차이가 궁금해졌다. A. Gradle과 Maven은 모두 빌드 관리 도구(Build Tool) Build(빌드) : 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말함 우리가 작성한 소스코드를 프로젝트에서 쓰인 각각의 파일 및 자원을 JVM이나 톰캣 같은 WAS가 인식할 수 있도록 패키징하는 과정 및 결과물 Build-Tool : 소스코드에서 애플리케이션을 생성하면서 여러가지 외부 라이.. 2023. 12. 4.
Framework와 Project 왜 프레임워크를 사용하는가? 다음은 초간단하게 만들어 볼 수 있는 방문 횟수 애플리케이션이다. 초간단 방문 횟수 조회 서비스 → 단 3개의 파일로 동작하는 애플리케이션을 만들 수 있다. GitHub - next-step/spring-learning-test at simple Q. 이게 가능한 이유는? A. build.gradle에 선언된 의존성 때문 → 코드 몇 줄만 작성해도 많은 것을 만들 수 있다. 이는 프레임워크가 있었기 때문에 비즈니스 규칙만 구현하고도 프로그램을 완성할 수 있다. Spring 단순 프레임워크라기 보다는 다양한 분야로 애플리케이션 제작에 도움을 주는 프로젝트 그룹 Java 기반 엔터프라이즈 애플리케이션 제작에 도움을 주는 전반적인 프로그래밍 / 설정 모델 제공 → 이 과정에서 집중.. 2023. 11. 29.
Repository Interface 메소드 실습 (1) H2 DB in-memory를 사용하고 있다. 따라서 Data가 유지되지 않고, test가 끝나는 시점에 data가 사라지게 된다. JPA Repository에서 제공하고 있는 메서드들의 많은 부분들이 조회와 관련한 것 → 따라서 기본적인 Data를 사전에 만들어두고 조회를 해야 함 가장 쉽게 사용할 수 있는 것이 data.sql 파일이다. data.sql 파일을 resources 하위에 두면 JPA가 로딩할 때, 자동으로 해당 쿼리를 한번 실행해준다. test할 때 사용하기 위해서는 test 하위에 resources를 두고 data.sql 파일을 만들어주면 된다. main폴더에는 원래 resources 폴더가 있는 반면, test에는 없다. resources 하위에 data.sql까지 만들면 된다. 이.. 2023. 7. 20.