pwoogi
자신의 왜곡된 경험을 진실이라고 생각하지 말자

프로그래밍/Spring 9

첫 미니프로젝트 종료

첫 프론트와의 협업이 끝나고 많은 것을 깨닫게 되었다. 부족한 자료구조, 메서드 사용방식부터 AWS EC2를 활용한 Http -> Https 동적 웹 ALB 기술 기초지식까지 아직 모르고 있는게 너무나 많다. L7 Load Balancer로 프로토콜 헤더로 서버 분산을 가능케 해주는 AWS의 Load Balancer에 대해서도 알아보았고 Spring security에 대한 복습 + JWT의 관련 사용법을 다시 한 번 복습하게 되었다. 아래와 같은 기초 지식들 복습해보는 시간을 가져야겠다. AuditorAware JPA와 AuditorAware를 사용하면 다음과 같이 간단한 매핑을 통해 특정 필드에 지금 로그인한 사람의 정보로 등록자를 자동으로 입력 해줄 수 있다. @Configuration @Enable..

Spring Boot Validation

Validation의 필요성? 일반적인 애플리케이션에서 데이터 유효성 검사 로직은 다음과 같은 문제를 가지고 있다. 애플리케이션 전체에 분산되어 있다. 코드 중복이 심하다. 비즈니스 로직에 섞여있어 검사 로직 추척이 어렵고 애플리케이션이 복잡해진다. 이러한 문제 때문에 데이터 유효성 검사 로직에 기능을 추가, 수정하기 어렵고, 오류가 발생할 가능성도 크다. Bean Validation Bean Validation은 위에서 말한 문제들을 해결하기 위해 다양한 제약(Contraint)을 도메인 모델(Domain Model)에 어노테이션(Annotation)로 정의할 수 있게한다. 이 제약을 유효성 검사가 필요한 객체에 직접 정의하는 방법으로 기존 유효성 검사 로직의 문제를 해결한다. Validation 올바..

ORM, Hibernate, JPA

ORM이란? 객체 지향 언어를 이용하여 서로 호환되지 않는 타입 간의 데이터를 변환하는 기술 DB 테이블 데이터를 (자바) 객체와 매핑하는 기술 RDBS -> 객체 지향 DB로 가상화 목적 DB의 추상화 : SQL 구현을 없애고 DB 변경에 유연해지는 것 객체의 이점을 활용 : 객체간 참조 (type - safety) 관심사 분리 : 비즈니스 로직에 좀 더 집중하게 하는 것 Jakarta(JAVA) Persistence API RDBMS를 다루기 위한 인터페이스 표준 명세 1. 기본적으로 관계형 DB의 영속성만을 규정 2. API + JPQL + metadata(+ Criteria API) Persistence(영속성) 프로세스가 만든 시스템의 상태가 종료된 후에도 사라지지 않는 특성 구현 방법 : 시스..

AOP & Logging (slf4j)

AOP란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 ..

[SPRING BOOT]JWT, Thymeleaf, form (2/2)

Thymleaf Thymeleaf는 웹뿐만 아니라 다른 환경을 위한 최신의 서버-사이드 자바 Template Engine이며, HTML, CSS, XM, JS 및 Text까지 수용(이는 다른 템플릿 엔진과 동일)한다. 타임리프의 주 목표는 유지관리가 쉬운 템플릿 생성 방법을 제공하는 것이며, 실제로 템플릿에 영향을 주지 않는(HTML의 구조를 깨지 않는, 기존 HTML 코드를 변경하지 않고 덧붙이는 코드) 방식을 사용한다. 즉, Natural Templates 개념을 기반으로 한다. 이를 통해 디자인 팀과 개발 팀간 갈등, 격차 해소가 기대된다. 짧게 요약하면, 클라이언트가 동적으로 그리는 방식이 아니라 서버가 html 그려서 내려주는 방식 서버에서(유저마다 달라질 수 있는 동적) 데이터들을 구해서 미리..

[SPRING BOOT]JWT, Thymleaf, form (1/2)

드디어..JWT 구현 성공.. 하 JWT 사용하는이유 1. Session마다 다른 Client 정보를 가지고 있을 수 있기 때문에 세션 저장소가 필요함(JWT는 secret key) 2. 로그인 정보를 Server에 저장하지 않고 Client에 로그인 정보를 JWT로 암호화하여 저장을 통해 인증/인가 3. 서버에 저장하지 않기 때문에 stateless 토큰값을 준다 Session과 차이가 있다면? 세션방식의 JESSIONID는 Key로만 활용 (의미없는 값) 토큰은 유저를 설명할 수 있는 데이터를 포함 JWT 단점 1. 한 번 제공된 토큰은 회수가 어려움 세션은 서버에서 세션을 삭제하면 브라우저의 JESSIONID는 무용지물, 그러나 토큰은 한번 제공된 토큰을 회수할 수 없다. (단, Refresh To..

[DI, IoC, Bean] 개념 박살내기

3주차 개념정리 정말..알아야할게 끝도 없다 DI(Dependency Injection) 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. 강한결합 강한 결합은 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있음을 뜻한다. 자바를 배울 때 상속과 포함관계, 그리고 인터페이스에 대해서 공부를 했었는데 그 개념과 굉장히 유사한 것 같다 Controller1이 Service1의 객체를 생성하고 생성자를 통해 강한결합이 되어있다. 즉 “의존 대상 B가 변하면, 그것이 A에 영향을 미친다”고 한다. 즉, B의 기능이 추가되거나 변경되면 그 영향이 A에 미치는 것이다 class BurgerChef { private ..

Spring MVC Architecture

앞으로 쭉 함께 가야할 녀석이니까 기본이 가장 중요할 것 같다 그래서 오늘은 MVC에 대한 정리를 해볼까 한다 우선 이번주차에 과제는 알아할 내용들을 최대한 빠르게 습득하는데 목적을 두었다. 그러다보니 Back에서 이해됐던 부분들이 Front에서 이해하지 못하는 부분들과 겹쳐서 많은 혼란이 있어서 연습했던 프로젝트는 대 실패.. 다음엔 Front에 많은 투자를 하지 않으면서 기능구현에 최대한 목표를 두어야겠다. MVC 패턴 MVC 패턴이란 사용자의 요청을 처리하고 다시 사용자에게 반환하는 과정을 3가지 역할 Model, View, Controller 로 구분해서 처리하는 개발 방법을 의미한다. 즉, 사용자가 웹 브라우저를 통해서 URL을 호출하면 Controller에서 요청들을 받고 그안에서 로직이나 데..

게시판 만들기 (Usecase Diagram & API)

간단한 기능이 있는 게시판 만들기 Usecase Diagram 시스템과 사용자의 상호작용을 다이어그램으로 표현한 것 즉, 사용자의 관점에서 시스템의 서비스, 기능, 외부와의 관계에 대해서 다이어그램으로 표현한 것을 말한다. 1. 제목, 작성자명, 작성 날짜를 조회하기 2. 조회할 때 날짜 기준으로 내림차순 정렬하기 3. API 호출할 때 입력된 비밀번호와 일치여부 판단하기 4. 비밀번호를 비교하여 동일할 때만 글이 수정, 삭제되게 하기 API로 다시 정리하기 Feature Method URL Return 게시글 작성하기 POST /api/posters Poster 게시글 조회하기(날짜기준 내림차순) GET /api/posters List 게시글 비밀번호 입력하기 POST /api/posters Poste..