spring21 mvc2 - Bean Validation Bean Validation 검증 기능을 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 일반적인 로직이다. 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고 표준화 한 것이 바로 Bean Validdation이다. Bean Validation을 잘 활용하면 애노테이션 하나로 검증 로직을 편리하게 사용할 수 있다. Bean Validation이란 javax 기술 표준으로 구현체가 아니다. 따라서 검증 애노테이션과 인터페이스의 모음이다. 이를 구현한 기술 중 일반적으로 사용하는 구현체는 하이버네이트 Validator다. Bean Validation을 사용하기 위해 의존관계를 추가해줘야 한다. implementation 'org.springframework... 2022. 2. 17. mvc2 - 쿠키, 세션 로그인 향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 한다. 이렇게 하려면 web은 domain을 알고 있지만 domain은 web을 모르도록 설계해야 한다. 이것은 web은 domain을 의존하지만 domain은 web을 의존하지 않는다고 표현한다. 쿠키 쿠키 방식만을 이용한 로그인을 구현해보면 @Slf4j @Controller @RequiredArgsConstructor public class LoginController { private final LoginService loginService; @GetMapping("/login") public String loginForm(@ModelAttribute("loginForm") LoginForm form){ return "login/.. 2022. 2. 14. HTTP 웹 기본지식 - 2 HTTP 메서드 API URI 고민 URI는 리소스만 식별해야 한다. 리소스와 해당 리소스를 대상으로 하는 행위를 분리 리소스는 명사(URI), 행위는 동사다(Method). HTTP 메서드 종류 1. GET: 리소스 조회 2. POST: 요청 데이터 처리, 주로 등록에 사용 3. PUT: 리소스를 대체, 해당 리소스가 없으면 생성 4. PATCH: 리소스 부분 변경 5. DELETE: 리소스 삭제 6. 기타메서드: HEAD, OPTIONS, CONNECT, TRACE 등등 1. GET 리소스 조회 서버에 전달하고 싶은 데이터는 query를 통해서 전달 메시지 바디를 사용할 수는 있지만 범용적이지 않아 사용하지 않는 것이 좋다. 2. POST 요청 데이터 처리 메시지 바디를 통해 서버로 요청 데이터 전달.. 2022. 2. 12. MVC-2 message, validation 메시지 화면에 보이는 문구가 마음에 안든다고 전부 고쳐달라 하면 어떻게 해야할까? HTML파일에 메시지가 하드코딩 돼 있기 때문에 상품명, 가격, 수량 같은 label에 있는 단어를 변경하려면 화면들을 다 찾아가면서 변경해야 한다. 다양한 메시지를 한 곳에서 관리하는 기능을 메시지 기능이라고 한다. 예를 들어 messages.properties라는 메시지 관리 파일을 만들고 item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML들은 해당 데이터를 key 값으로 불러서 사용한다. 국제화 메시지 파일을 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 국가를 인식하는 HTTP 'accept-language' 헤더 값을 .. 2022. 2. 11. HTTP 웹 기본지식 - 1 IP IP 패킷을 이용해서 데이터를 전송한다. 패킷에는 출발 IP와 목적 IP가 적혀 있다. 하지만 IP 프로토콜 만으로는 한계가 있다. 1. 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 2. 비신뢰성: 패킷의 손실이나 일정하지 않은 패킷 전달 순서의 문제 3. 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러개일 때 따라서 IP를 보완하기 위한 TCP, UDP가 존재한다. TCP에는 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등이 포함돼 있다. TCP(Transmission Control Protocol) 1. 연결지향- TCP 3 way handshake ACK가 없으면 메시지를 보내지 않는다. 또한, 3번 ACK와 함께 메시지를.. 2022. 2. 4. 스프링 기본편 복습 - 2 빈에 등록해야 할 것들이 많아지면 귀찮고 누락 할 가능성이 커진다. 따라서 스프링은 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공하고, 의존관계 자동 주입을 해주는 @Autowired도 제공한다. 컴포넌트 스캔을 사용하기 위해서 @ComponentScan를 붙여주면 된다. 탐색 위치와 기본 스캔 대상 탐색할 패키지의 시작 위치 지정을 할 수 있지만 관례적으로 패키지 위치를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 둔다. 지정을 하려면 basePackages: 탐색할 패키지의 시작 위치를 지정 basePackageClasses: 지정한 클래스의 패키지를 탐색 시작 위로 지정 디폴트는 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치 컴포넌트 스캔 기본 대상 @.. 2022. 1. 28. 스프링 기본편 복습 - 1 스프링 부트 톰캣 같은 웹 서버를 내장하고 있기 때문에 별도의 웹 서버를 설치하지 않아도 된다. 빌드 구성을 위한 starter 종속성 제공, 외부 라이브러리 자동 구성(버전 자동 맞춤) 운영 환경에서 모니터링 기본 구성, 관례에 의한 간결한 설정 스프링의 핵심 자바 언어 기반의 프레임워크로 객체 지향 언어가 가진 특징을 살려내는 프레임워크, 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 객체 지향 프로그래밍 객체들의 모임으로 각각의 객체는 메시지를 주고받고 데이터를 처리한다. 프로그램을 유연하고 변경에 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 객체 지향이란 객체의 역할과 구현을 분리하는것을 의미한다. 역할과 구현으로 구분하면 단순, 유연해지며 변경도 편리해진다... 2022. 1. 23. JPA @Embedded, @Lob, 생성자 @Embedded 1. 새로운 값 타입을 직접 정의할 수 있다. 2. 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함 3. int, String과 같은 값 타입 @Embeddable: 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 기본생성자 필수. 장점: 1. 재사용 가능 2. 높은 응집도 3. Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소드를 만들 수 있음. 4. 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티티에 생명 주기를 의존함. 매핑하는 테이블은 같지만 예를 들어 Address만으로 메서드를 만들면 활용도가 높아진다. 객체와 테이블을 세밀하게 매핑할 수 있다. 만약 한 테이블 안에서 주소를 두개 가져가야 .. 2022. 1. 15. Optional, JPA N + 1, fetch 자바 8 Optional는 예상치 못한 NullPointerException 예외를 메서드로 회피할 수 있다. 또한 null체크를 안 해줘도 돼서 코드가 깔끔해진다. 만약 참조변수의 값이 만에 하나 null이 될 수 있다면 ofNullable()메서드를 이용해 Optional 객체를 생성하는 것이 좋다. Optional 객체 생성 -> String str = "abc"; Optional optVal = Optional.of(str); Optional optVal = Optional.of("abc"); Optional optVal = Optional.of(null); -> NullPointerException Optional optVal = Optional.ofNullable(null); -> ok 빈 옵.. 2021. 11. 26. 이전 1 2 다음