워크샵6349 141

[괴발개발] 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

[괴발개발] TODO 웹 개발 노트 - 예외처리 및 완료

0. 권한 없이 admin.html 접속 ✅ (로그인 폼으로 이동) 1. 회원가입 값 하나도 안 넣고 해보기 ✅ (빈칸임을 알려줌) 2. 회원가입 값 이메일만 넣고 해보기 ✅ (빈칸임을 알려줌) 3. 회원가입 값 비밀번호만 넣고 해보기 ✅ (빈칸임을 알려줌) 4. 로그인 그냥 해보기 (아무거나) 🚫 (error 라고만 알려줌) -> ✅(html 예외처리) 5. 회원가입 제대로 해보기 ✅ (로그인 폼으로 정상 이동) 6. 로그인 제대로 하기 ✅ 7. 일반 계정으로 admin.html으로 접속하기 ✅ (접근 불가 페이지임을 알려줌) 8. 글 작성 값 하나도 안 넣고 해보기 ✅ (빈칸임을 알려줌) 9. 글 작성 값 제목만 넣고 해보기 ✅ (빈칸임을 알려줌) 10. 글 작성 값 내용만 넣고 해보기 ✅ (빈칸임을..

Spring/괴발개발 2022.02.20

[괴발개발] TODO 웹 개발 노트 - 권한 부여

기존에 존재했던 코드를 거의 다 갈아엎었습니다. 아무래도 RESTful API를 본인 어플리케이션에서 사용하면서 권한을 부여하기에는 조금 무리가 있는 것 같았기에 갈아엎었습니다. (JWT가 문제였는 데, JWT를 사용하여서 해더를 통해 권한을 부여하여야하는 데, 이를 관리하기 위해서는 쿠키에 값을 저장을 해야합니다. 그럼 결국에는 코드 갈아엎는 것은 동일하였기에 코드를 그냥 갈아엎고, RESTful를 포기하였습니다.) @EnableWebSecurity @AllArgsConstructor @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { private MemberService memberService; @Bea..

Spring/괴발개발 2022.02.19

[Spring] Spring AOP/PSA 설명

이전 포스트에서 POJO를 간단하게나마 설명하였습니다. 그중에서 IOC와 DI는 짧게라도 설명한 적이 있으나, AOP와 PSA는 없었기에 이번 기회에 포스트하고자 합니다. AOP란? Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 뜻합니다. 관점지향은 쉽게 설명하자면, 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다... 정도로 설명이 가능합니다. 한 마디로 표현하자면, 어떤 로직을 어떤 관점으로 각각 공통화된 로직이나 기능을 하나의 단위로 묶는 것 이라고 표현할 수 있습니다. 핵심관점은 보통 우리가 적용하고자하는 핵심 비즈니스 로직 등이고, 부가적인 관점으로는 핵심로직을 실행하기위해 행해지는 DB연결, 로깅, ..

Spring 2022.02.19

[프로그래머스] 디스크 컨트롤러

※ 해당 문제의 링크는 여기입니다. ※ 3단계 문제인 만큼 굉장히 어려웠던 문제였습니다. 이번 글에는 제한 사항 대신 알고리즘 및 전체 코드만 포스팅하겠습니다. (제한 사항, 문제에 잘 적혀있는 데 또 적는 거 귀찮....) 알고리즘 가장 시간이 짧은 순서대로 일을 처리해야하는 것이 주 목적입니다.하지만 일은 한 번에 하나씩만 처리가 가능하므로일이 끝나고 나서 현재 시간때 이전에 들어온 일들 중 가장 시간이 짧은 것을 다음으로 일을 하며,하나 하나씩 처리해야하는 알고리즘을 가지고 있습니다. 단, 요청 시간. 즉, 언제 들어왔는 지 역시 파악해야하는 문제입니다. 전체 소스코드 import java.util.*; class Solution { public int solution(int[][] jobs) { ..

[Spring] Spring POJO 설명

Spring 본질이자, Spring 관련 글들을 읽으면 왠만해선 항상 나오는 POJO...이를 설명하고자 포스팅했습니다. POJO란? Plain Old Java Object의 약자로 단순한 자바 오브젝트라는 뜻입니다. 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 뜻합니다. 그러한 POJO에 어플리케이션의 핵심로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 합니다. 무엇을 POJO라고 부를 수 있나요? 1. 특정 규약에 종속되지 않는다. Java와 꼭 필요한 API외에는 종속되지 말아야합니다. EJB2와 같이 특정 규약을 따라 만들게 하는 경우는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 유도하고 있습니다...

Spring 2022.02.18

[괴발개발] TODO 웹 개발 노트 - 회원가입과 비밀번호 암호화

원래는 그냥 평문으로 저장을 하고자하였지만, 최소한의 암호화는 해야한다고 생각이 들어 암호화를 하도록 하였습니다. 일단, 먼저 기존 엔티티 중 회원(Member) 엔티티 코드를 조금 수정하였습니다. UserDetails 이라는 인터페이스를 구현을 합니다. 일종의 권한 및 핵심 사용자 정보를 편하게 저장시켜주는 인터페이스이기에 사용합니다. 자세한 내용은 이 글을 참조해주세요. (잘 정리되어 있어 도움이 많이된 글입니다.) @ElementCollection(fetch = FetchType.EAGER) @Builder.Default private List roles = new ArrayList(); @Override public Collection

Spring/괴발개발 2022.02.18

[프로그래머스] 더 맵게

※ 해당 문제의 링크는 여기입니다. ※ 프로그래머스에서 설명되어 있듯이 "힙을 이용해서 우선순위 큐를 구현할 수 있습니다." 라고 설명되었있습니다. 우선순위 큐와 힙에 대해서 궁금하신 분들은 링크 참조해주세요. 제한사항 스코빌의 길이는 2이상 1000000 입니다. K는 0이상 1000000000 입니다. 스코빌의 원소는 각각 0이상 1000000 입니다. 모든 음식의 스코빌 지수를 K이상으로 만들 수 없다면 -1를 반환합니다. 문제는 레벨 2 치곤 꽤 쉬운 편입니다. (레벨 1에서 이상한 문제를 만난 적이 있어서 일종의 트라우마가 생겨버린 것 같기도;;) 그리고 효율성 테스트까지 있기때문에 시간복잡도도 적당히 꼬아야합니다. (재귀함수를 사용해서는 효율성 테스트를 통과하기 어렵다는 의미입니다.) 알고리즘..