Spring 57

[괴발개발] 덕지덕지 - 기본 페이지 및 엔티티 설계

일상글에서 언급했다시피 프로젝트명을 Remote Note에서 덕지덕지로 바꾸었습니다. 포스트잇 혹은 메모지를 벽에 덕지덕지 붙인다는 말이 떠올랐고, 어감이 나름 괜찮아서 무엇보다도 Remote Note 보다는 괜찮아서 이름을 바꾸었습니다. 현재 아주 단순한 것부터 개발을 하였습니다. 먼저 엔티티부터 설계를 하였습니다. OAUTH 2.0으로만 로그인하도록 기획하였기에 이에 맞게 엔티티를 설계하였습니다. @Getter @AllArgsConstructor @NoArgsConstructor @Builder @Embeddable public class OAuth implements Serializable { @NotNull @Column(unique = true) private String email; @NotN..

Spring/괴발개발 2022.03.30

[Spring] JPA 공부 #1

JPA에 대해 자세히 공부해보고자 JPA 공부를 해보고자합니다. 일단 JPA에 대해 공부하다보니 영속성 컨텍스트에 대해 알아야하기에 영속성 컨텍스트가 무엇이고, 또 어떤 역할을 수행해주는 지에 대해 간단하게 제 방식대로 요약을 해보고, 직접 테스트하는 것으로 #1을 마무리하도록 하겠습니다. 영속성 컨텍스트(Persistence context)란? 일단 영속성 컨텍스트에 대해 알아보기전에 영속이 무슨 뜻인지 알아보기위해 사전에 검색했습니다. 그리고 컨텍스트는 저장소로써 어떤 정보들을 저장하고 관리하는 용도라고 하니 이 둘을 그냥 이어붙인다면 "영원히 계속 유지되는 성질들을 저장하고 관리"라는 뜻이 되나, 뭔가 어색한 뜻이기에 저만의 풀이로 해석하자면, "지속적으로 정보들을 저장하고 관리하는 저장소" 정도로..

Spring 2022.03.25

[괴발개발] Remote Note

갑자기 원격 노트가 있었음하면 생각에 개인 프로젝트로 한 번 만들어볼까 싶어서 직접 개발해보기로 했습니다. 원격 노트, 원격 메모지에 맞는 이름을 지을 려고 했지만, 딱히 좋은 생각이 들지않아서 Remote(원격) Note(노트) 라고 지었습니다. 누가 작명했냐;; 다음 pdf은 제가 Notion으로 작성한 일종의 기획서입니다. 총 2가지의 프레임워크를 사용할 것 같습니다. React Spring 일단 네이티브도 데드라인에 포함시켰으나, 상황에 따라 네이티브는 제외될 수도 있습니다. 이상입니다.

Spring/괴발개발 2022.03.22

[Spring] AOP 예제

※ 본 글은 AOP에 대해 어느 정도 이해를 하고 있다는 가정 하에 작성된 글입니다. AOP에 대해 자세히 모르시는 분들은 이 글을 참고해주세요. ※ [Spring] Spring AOP/PSA 설명 이전 포스트에서 POJO를 간단하게나마 설명하였습니다. 그중에서 IOC와 DI는 짧게라도 설명한 적이 있으나, AOP와 PSA는 없었기에 이번 기회에 포스트하고자 합니다. AOP란? Aspect Oriented Programming의 약 workshop-6349.tistory.com 일단, 간단한 REST API를 만들어 해당 API가 소요되는 시간, 그리고 리소스 요청 횟수를 제한, 이 2가지를 간단하게 하는 포스트를 하고자 합니다. 가상의 시나리오 클로버 도서관은 현재 코로나가 더 심해진 결과, 온라인에서..

Spring 2022.03.14

[괴발개발] REST API - 이메일 인증

※본 포스트는 이전 포스트와 이어집니다.※ 지난 번에... 가상의 시나리오들 중 3번을 제외한 나머지들은 개발하였습니다. 비밀번호 변경을 위한 메일 발송을 하기 위해 몇 가지 세팅을 해야합니다. 준비 과정 먼저 지메일(gmail)를 사용하여 이메일을 발송할 것이기에 앱 비밀번호를 추가해줘야합니다. 앱 비밀번호는 2단계 인증을 사용해야하지만 가능한 기능입니다. (보안 탭에서 찾을 수 있습니다.) 기기 선택을 메일을 보낼 기기로 선택하고 생성한 후, 도움말에서 나온 대로 설정해주면 사용 가능합니다. 그후, dependency를 추가합니다. implementation 'org.springframework.boot:spring-boot-starter-mail' dependency를 추가하고 난 후에는 appli..

Spring/괴발개발 2022.03.03

[괴발개발] REST API - 인증

저는 Spring로 인증을 할 때, 늘 WebSecurityConfigurerAdapter를 상속해서 개발했었습니다. 하지만, 이 방법을 하면, SpringSecurity가 필요하였고, SpringSecurity에 아무런 설정이 없다면, 기본 로그인을 해야 하고, 그렇지 않으려면, WebSecurityConfigurerAdapter로 설정을 해주어야 했습니다. 그리고 그 외에도 설정을 해주어야 하는 부분들이 많아 프로젝트의 규모가 크면 클수록 귀찮아지고 하나하나 하기 힘들었습니다. (물론 보안에 있어 많은 모듈들을 지원해주는 것에 있어서는 고마움을 느낍니다.) 그래서 이번 포스팅에서는 SpringSecurity 없이 다음 3가지 인증, 인가 기능을 구현해보는 것을 목표로 세웠습니다. 비밀번호 암호화 이메..

Spring/괴발개발 2022.03.02

[Spring] DTO vs VO

※본 글은 제 주관적인 생각을 나타낸 글입니다. 주의해주세요.※ 먼저 이 글에서 DTO에 대해 설명하고 있지만, 다시 한 번 더 자세히 설명하겠습니다. DTO(Data Transfer Object) DB에서 검색하기 위해 DAO와 함께 사용되는 경우가 종종 있다. 저장 및 검색 외에 로직을 가지지 않는다. (비지니스 로직 가지지 않음) 가변 레이어와 레이어 사이에서 사용 가능 VO (Value Object) 값이 동일하다면 동일한 객체로 봄 불변 비지니스 로직을 가질 수 있다. DTO를 대신하여 표현하기도 한다. equals와 hashcode를 재정의를 해야한다. 모든 레이어에서 사용 가능 위 내용들은 이 글을 참고하였습니다. 사실 제목처럼 뭐를 사용하는 것이 맞다는 정답도 없고, 논쟁이 많기 때문에 사..

Spring 2022.02.28

[Spring] Spring Transaction 세부 설정 설명

※ 이 글은 이 글과 연결되어 있습니다! 참고해주세요. ※ Spring 트랜잭션에는 4가지의 세부 설정이 가능합니다. 트랜잭션 전파 격리 수준 제한 시간 읽기 전용 트랜잭션 전파 트랜잭션의 경계에서 이미 진행 중인 트랜잭션이 있거나 없을 때 어떻게 작동할 것인가를 결정하는 방식을 의미합니다. Spring이 지원하는 전파 속성은 다음의 7가지가 있습니다. REQUIRED SUPPORTS MANDATORY REQUIRES_NEW NOT_SUPPORTED NEVER NESTED 저도 자세히는 모르기때문에 간략하게만 설명하도록 하겠습니다;; 자세히 아시는 분들은 댓글 달아주시면 감사하겠습니다.. 1. REQUIRED default 속성으로 모든 트랜잭션 매니저가 지원하며, 대개 이 속성을 사용합니다. 미리 시작..

Spring 2022.02.21

[괴발개발] TODO 웹 개발 노트 - 도커(Docker) 배포

먼저 docker를 사용해서 배포를 했습니다. ssh 역시 적용하고자하였으나 잘 되지않아 일단 localhost에서만 하도록 하였습니다. 기존에는 테스트 단계였기에 인-메모리 DB인 H2 데이터베이스를 사용하였습니다. 현재는 mysql 8.0 데이터베이스를 적용하였습니다. 먼저 DB를 docker에 저장하면서, 어플리케이션을 같이 실행(배포)하기 위해 docker-compose.yml를 사용해서 배포를 했습니다. application.yml에 있는 정보 일부를 docker-compose.yml로 넘깁니다. 그리고 ./gradlew build를 사용해서 빌드를 하고 jar를 생성하여 도커에 배포합니다. version: "3" services: database: image: mysql container_na..

Spring/괴발개발 2022.02.21

[Spring] Spring Transaction 특징 및 핵심기술 설명

Transaction이란? 트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다. Transaction의 특징 트랜잭션은 DB 시스템에서 병행 작업 및 회복 작업 시 처리되는 작업의 논리 단어입니다, 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변화 과정의 작업 단위입니다. 하나의 트랜잭션은 Commit 되거나 Rollback 됩니다. Transaction의 성질 Atomicity(원자성) 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전..

Spring 2022.02.20