Coding 67

(review) Spring 구성하기 #Day8

1. spring pjt 초기화 생성 시 의존성 추가 Mapper는 생성 시 없어서 필요 시 추가 Spring 구동 시 자동생성 Annotation : @SpringBootApplication dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:sprin..

Spring 예외처리 #Day7

참고. JAVA 예외처리 유효성검증(@Valid, @Validated)으로 실패응답("status": 400, "error": "Bad Request" / "status": 500, "error": "Internal Server Error")을 줄 수 있지만, 더 상세하게 혹은 비즈니스 커스텀한 예외가 필요 → Spring에서는 에너테이션을 적극 활용한 예외처리 지원 1. @ExceptionHander : Controller 레벨에서의 예외처리 step1. Controller 클래스 내에 예외처리 메서드 구현 reqbody에 유효성검증(@Valid) 실패 시 예외처리메서드(@ExceptionHandelr) 호출 e.getBindingResult().getFieldErrors() 를 통해 전달되는 메시지가..

Spring Business(Service) Layer #Day6

Spring MVC의 Layered Architecture API(Presentation) Layer @Controller : DTO 사용 전달받은 요청 데이터를 Service 클래스로 전달하고, 응답 데이터를 클라이언트로 다시 전송해 주는 단순한 역할 Business(Service) Layer @Service : Entity 사용 도메인 업무 영역을 구현하는 비즈니스 로직 구현영역 Entity : 서비스 계층에서 데이터 엑세스 계층과 연동하면서 비즈니스 로직을 처리하기 위해 필요한 데이터를 담는 역할 (controller의 dto와 동일) Persistance(Data access) Layer @Repository : Entity 사용 API Layer ↔ Business Layer 연동 객체 간 의존..

Spring DTO, Validation #Day5

DTO(Data Transfer Object) @Valid @RequestBody 엔터프라이즈 애플리케이션 아키텍처 패턴 data : 파라미터를 - Transfer : 전송해주는 - Object: 객체 즉, DTO클래스가 요청/응답 데이터(파라미터)를 하나의 객체로 전달해줌 → 파라미터가 변경되더라도 DTO만 수정하면 다른 객체들은 수정될 필요가 없음(선택 아닌 필수!) → DTO를 적극 활용해야 하며, DTO는 특별한 일이 없는한 json 포맷으로 데이터를 주고 받는다. → DTO를 사용한다면 요청과 응답에서 DTO로 통신해야 한다. 사용방법 네이밍 : 컨트롤러의 도메인명(컨트롤러는 생략) + 메서드 타입 + Dto : ex. BorderPostDto 클래스 단위보다 메서드에 맞게 DTO를 만들어주는게..

Spring Presentation(API) Layer #Day4

API(Presentation) Layer : @Controller 0. Spring 위임영역 : req를 controller까지 보내준 상태 1. Presentation(API) Layer @Controller : req를 처리해야 할 controller까지 찾아온 상태 2. Business(Service) Layer @Service : 실질적인 액션을 하는 단계 → 컨트롤러와 서비스가 유사하게 느껴지지만, 컨트롤러는 좀 더 거시적인 관점에서 흐름제어(혹은 관문역할)를 하고, 서비스가 실질적인 비지니스 로직을 가지고 있음. → 객체지향 관점에서 계속 객체단위로 나뉜다고 생각 3. Persistant Layer @Repository : 물리DB와 통신하는 인터페이스 계층 Response는 반대로(3→2→..

Spring MVC

디자인 패턴 : 자주 사용하는 설계 패턴을 정형화해서 유형별로 가장 최적의 방법으로 개발 할 수 있도록 정해둔 설계 알고리즘과 유사하지만 명확하게 정답이 있는 형태는 아니며, 프로젝트 상황에 맞추어 적용가능 (프레임워크는 뼈대라고 한다면, 디자인패턴은 방법론, 방향 과 같은 의미라고 할 수 있다) 싱글톤, Proxy, Front Controller 패턴 등 디자인패턴의 장점 뛰어난사람이 해결한 방법을 일반인도 해결할 수 있게함 효율적으로 커뮤니케이션을 하는 것(서로의 생각 방향을 통일시킴) - 개발자 간의 원활한 소통 소프트웨어 구조 파악 용이 재사용을 통한 개발 시간 단축 설계 변경 요청에 대한 유연한 대처 MVC? Model-View-Controller 특정한 역할을 어떻게 나눌 것인가? 에 대한 고..

Spring Servlet Filter, Interceptor, AOP #Day3

Servlet Filter → 인증(Spring Security), 인코딩 Interceptor → 로그인 체크, 권한체크 AOP → 로그(소요시간 측정) 관리, 트랜젝션 Servlet Filter Interceptor AOP 비즈니스 로직과 분리하여 “공통 부분을 따로 빼서 걸러냄(관리함)” spring에 위임해서 처리 실행 단위 Servlet 단위 (Spring과 무관한 자원 대상) Servlet 단위 (Spring의 모든 객체) 메서드 단위 위치&시점 Spring 외부 (Servlet 호출되기 전) Spring 내부 Spring 내부 메서드 앞 역할 요청과 응답을 거른 뒤 정제 요청에 대한 작업 전, 후 메서드 전, 후 implements Filter implements HandlerIntercep..

Spring IoC /DI #Day2

객체지향 특징 : 추상화, 캡술화, 상속, 다형성 객체지향 설계 원칙 : SOLID(SRP, OCP, LSP, ISP, DIP) OCP: 개방-폐쇄 원칙 (Open/closed principle) 소프트웨어 요소는 확장에서는 열려 있으나 변경에는 닫혀 있어야 한다 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 확장 - new를 없애는 행위. 뭐가 들어와도 상관없는 상태가 됨 변화 - 개발자가 수정코딩하는 행위는 최대한 줄여야 함 DIP: 의존관계 역전 원칙 (Dependency inversion principle) 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나 구현 클래스에 의존하지 말고, 인터페이스에 의존하라 역할(..

Spring Framework 패키지 생성 #Day2

https://start.spring.io/ 스프링 프레임워크 다운받아서 시작(IntelliJ Ultimate 은 내장) 그래들, 메이븐 → 빌드해주는 도구 (빌드 툴에 무엇이든 톰캣에 배포가능한 형태가 되어야 되기 때문에 최종형상은 동일함) Spring Framework 2.7.14 버전 / jdk11 사용 jar, war → 최종 배포를 하기 위해 빌드한 결과 추출될 파일유형 jar(Java Archive) : 자바 파일(스프링 부트는 WAS를 내장하고 있기 때문에 구동가능) WAR ( Web Application Archive ) : WAS 필요 Dependencies : 프로젝트 생성 시 플러그인 설치 spring web 추가 : 웹을 빌드하고, spring mvc를 사용할 수 있는 애플리케이션...

Spring Framework 기초 #Day1

Framework : 프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공 장점 효율적으로 코드를 작성(개발자가 핵심로직에 개발하는 것에 집중) 정해진 규약이 있어 유지보수, 재사용, 확장 등이 용이함 단점 사용할 framework에 대한 학습이 필요 자유롭고 유연한 개발이 어려움 Libarary와의 차이 : Library는 애플리케이션 흐름의 주도권이 개발자에게 있는 반면, Framework은 애플리케이션 흐름의 주도권이 개발자가 아닌 Framework에 있다. 서블릿 구성(요약) WAS 내에서 동작하며, (WAS 없이 웹애플리케이션=동적 웹서비스 는 불가) 1. 웹컨테이너(web.xml) : 외부 클라이언트가 서버로 진입할 때 웹 컨테이너가 받아서 매니지먼트 해줌(스레드 생성하고 서블릿을 실행시켜줌)(스..