분류 전체보기 94

API계층 ←→ 서비스 계층

서비스계층은 Controller에서 전달 받은 요청을 실제로 처리하는 비즈니스 로직을 수행 후 결과 값을 다시 API계층으로 리턴해주는 역할을 합니다. public class UserService { //회원가입 public User createUser(User user){ return null; } //회원수정 public User updateUser(User user){ return null; } //회원찾기 public User findUser(long userId){ return null; } //회원전체출력 public List findUsers(){ return null; } //회원삭제 public void deleteUser(long userId){ } 컨트롤러 클래스의 핸들러메서드와 서비..

들어오는 데이터(DTO)에서 유효성 검증

@RequestBody를 통해 JSON데이터가 자바객체로 변환하면서 들어온 데이터 DTO에서 값들에 대한 유효성을 처리해보자. 유효성 검증을 위한 의존 라이브러리 추가 Spring Boot에서 지원하는 Starter가 필요하다. build.gradle파일의 dependencies 항목에 implementation 'org.springframework.boot:spring-boot-starter-validation'// validation 을 추가한다. 주로 사용하는 유효성 애너테이션 @Email - 유효한 이메일 주소인지를 검증 - 유효한 검증에 실패하면 내장된 디폴트 에러 메세지가 콘솔에 출력 @NotBlank - 정보가 비어있지 않은지 검증 - null 값이나 공백(""), 스페이스(" ") 같은 값..

개발/Spring 2023.08.14

JSON으로 들어오는 HTTP 요청 객체로 한번에 받기

컨트롤러의 핸들러메서드에서 JSON으로 HTTP요청을 받을 때 DTO객체를 생성하여 한번에 요청 데이터를 받아보자 방법은 간단하다 핸들러메서드의 매개변수를 받는 공간에 스프링 프레임워크에서 지원하는 @RequestBody 애너테이션을 추가하여 받을 수 있다. 스프링 프레임워크에서 지원하는 @RequestBody 애너테이션은 JSON 형식의 RequestBody를 Dto클래스의 객체로 변환을 시켜주는 역할을 한다. JSON 형식이 아닌 다른 형식의 데이터를 전송한다면, Spring 내부에서 "Unsupported Media Type" 같은 에러메세지를 전달한다. 그럼 dto객체로 변환하여 비지니스로직을 거쳐 반환하려는 데이터를 다시 JSON으로 내보내야할 때는 어떻게 처리할 수 있을까? 이것도 스프링 프레..

개발/Spring 2023.08.14

MVC패턴 계층 기반 패키지 구조

Spring Boot 팀에서는 테스트와 리팩토링이 용이하고, 향후에 마이크로 서비스 시스템으로서의 분리가 상대적으로 용이한 기능 기반 패키지구조 사용을 권장을 하고있다. 위 사진은 팀프로젝트인 gigker 프로젝트 때 패키지 목록이다. 빨간줄로 표시된 부분을 보면 DB 설계 후 나온 각각의 테이블을 기준으로 패키지를 각각 만든다.

SQLD 49회차 합격!!

와아ㅏㅏ 한번만에 합격했다...ㅠㅠ 그래도 노력이 헛되지 않아서 기분이 굉장히 좋다. 비전공자에 노베이스 순수 공부시간 1주일 조금 넘는 시간을 준비해서 합격을 했다. 실수한게 많아서 조마조마 했지만 합격이라 정말 다행인 것 같다. SQLD기출문제 일명 노랭이책을 사서 1회독 후 기출문제를 회차별로 총 5번 풀었다. 나도 할 수 있다. 이렇게 하나하나씩 쌓아 나가자.

자격증/SQLD 2023.06.30

CloudFront에 수정한 S3객체에 대해 바로 적용되지 않는 현상

문제 부트캠프 메인프로젝트를 같이 진행했던 프론트분이 수정한 부분을 홈페이지에 적용해달라 하여 S3 버킷을 새로 재 배포 하였으나 S3의 주소로는 적용이 되었는데 CloudFront에는 적용이 계속 안되는현상 원인 찾아보니 해당 문제는 CloudFront가 캐시기능을 가지고있는데 기본 디폴트 값이 24시간동안 유지된다고 함. 변경된 사항이 적용되려면 24시간 이후에 적용이 된다. 해결 CloudFront의 무효화라는 탭에서 캐시제거를 할 수 있음. 이렇게 /*로 캐시를 전체 삭제 해준 뒤 확인해보면 적용이 된것을 확인할 수 있다. 주의할점 해당 방법은 한번 일시적으로 초기화하는것으로써 매번 적용할 때마다 즉시 변경된 사항을 보고싶으면 캐시를 비워주기위해 무효화생성을 그때마다 해주어야한다.

클라우드/AWS 2023.05.25

스프링 삼각형과 설정 정보-3

PSA - 일관성 있는 서비스 추상화 서비스 추상화의 예로는 JDBC가 있다. JDBC라는 표준 스펙이 있기에 오라클을 사용하든 MySQL을 사용하든, MS-SQL을 사용하든 Connection, Statement, ResultSet을 이용해 공통된 방식으로 코드를 작성할 수 있다. 이렇게 할 수 있는 이유는 디자인패턴인 어댑터 패턴을 사용했기 때문이다. 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한것을 서비스 추상화 라고 한다. 스프링 프레임워크에서는 서비스 추상화를 위해서 다양한 어댑터를 제공하고 있다. OXM(Object XML Mapping : 객체와 XML 매핑) 등등 다양한 기술이 있는데 다양한 기술들이 제공하는 API는 제각각이고 스프링은 제각각인..

스프링 삼각형과 설정 정보-2

AOP - Aspect? 관점? 핵심 관심사? 횡단 관심사? AOP(Aspect-Oriented Programming) 관점 지향 프로그래밍 AOP는 로직(code) 주입이라고 할 수 있다. 횡단관심사 : 로깅, 보안, 트랜잭션 기능 처럼 다수의 모듈에 공통적으로 나타나는 부분을 뜻한다. 핵심관심사 : 주요 프로그램의 로직을 얘기한다. 코드 = 핵심 관심사 + 횡단 관심사 @Before : 실행 전 시작되는 애너테이션 @After : 실행 후 시작되는 애너테이션 스프링 AOP의 핵심 3가지 - 스프링 AOP는 인터페이스 기반이다. - 스프링 AOP는 프록시 기반이다. - 스프링 AOP는 런타임 기반이다. JoinPoint 파라미터를 이용하면 실행 시점에 실제 호출된 메서드가 무엇인지, 실제 호출된 메서드..

스프링 삼각형과 설정 정보-1

스프링을 이해하는 데는 POJO(Plain Old Java Object)를 기반으로 스프링 삼각형이라는 애칭을 가진 IoC/DI, AOP, PSA라고 하는 스프링의 3대 프로그래밍 모델에 대한 이해가 필수다. 스프링 삼각형을 이해하지 않은 상태에서 스프링 프레임워크를 학습하는 것은 알파벳을 모르고 영어를 공부하는 것과 마찬가지다. - 스프링 입문을 위한 자바 객체지향의 원리와 이해 中 - 01_IoC/DI (제어의 역전/의존성주입) 먼저 프로그래밍에서 의존성이란? new 라고 볼 수 있다. 예) Car car = new Tire(); new를 실행하는 Car와 Tire 사이에서 Car가 Tire에 의존한다라고 단순하게 정의 할 수 있다. DI는 외부에 있는 의존 대상을 주입하는 것을 말한다. 의존 대상을..