분류 전체보기

Spring

[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 3. 회원 관리 예제 - 백엔드 개발

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술에 대한 수강 기록용으로 작성되었습니다. 1. 비즈니스 요구사항 정리 ❗ 아직 데이터 저장소가 선정되지 않았다는 전제하에 MemberRepository를 인터페이스(interface)로 만들 것이다. 향후에 JDBC, MyBatis, JPA 등으로 바꿔 끼울 수 있도록 인터페이스(interface)로 설정해두자. 컨트롤러(controller): API 생성 시 쓰이는 등 웹 MVC 컨트롤러 역할 서비스(service): 핵심 비즈니스 로직 구현 리포지토리(repository): 데이터베이스에 접근하여 도메인 객체를 DB에 저장 및 관리 도메인(domain): 회원,주문,쿠폰 등..

Spring

[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 2. 스프링 웹 개발 기초

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술에 대한 수강 기록용으로 작성되었습니다. 1. 정적 컨텐츠 파일을 웹 브라우저에 그대로 내려주는 것을 말한다. 웹 브라우저에서 hello-static.html을 요청하면 → 내장 톰캣 서버에서 스프링 컨테이너로 요청을 넘기게 된다. 이때 "hello-static" 관련 컨트롤러(controller)를 찾아보는 것이 1순위이나, 존재하지 않을 경우 resources/static 폴더 하위에서 해당 파일을 찾아 전달한다. 2. MVC와 템플릿 엔진 2-1. 동적 컨텐츠 JSP, PHP와 같은 템플릿 엔진들은 HTML을 서버에서 프로그래밍해 동적으로 바꿔 내려주는 역할을 한다. 2-..

Spring

[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 1. 프로젝트 환경설정

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술에 대한 수강 기록용으로 작성되었습니다. 1. 프로젝트 생성 1-1. 스프링 부트(Spring Boot) 버전 'SNAPSHOT'은 아직 개발 중인 버전이다. 'M(Milestone)'은 정식 릴리즈 전 사용자 테스트 버전을 말한다. 별도 표기 없는 것이 바로 정식 릴리즈 된 버전으로, 안정성 높은 스프링 라이브러리를 제공한다. 1-2. 프로젝트 메타데이터 Group은 com.reminder와 같이 대개는 기업의 도메인 주소를 작성하는 란이다. Artifact는 빌드돼 나오는 프로젝트 결과물의 이름을 지칭한다. 2. 라이브러리 살펴보기 ❗ 그레이들(Gradle)은 의존관계에 있..

개발노트

[Spring/Error] could not resolve org.springframework.boot:spring-boot-gradle-plugin 3.x

1. 오류 > Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.3. Required by: ... 인텔리제이(IntelliJ) 환경에서 프로젝트를 실행하자마자 만난 오류였다. 2. 원인 ❗ 스프링 이니셜라이저(Spring Initializr): https://start.spring.io ❗ 스프링부트(Spring Boot) 3.0 이상 버전에서는 Java 17을 필요로 한다. 스프링 이니셜라이저(Spring Initializr)에서 선택했던 Spring Boot/Java 버전간 호환성의 문제였다. 3. 해결 3-1..

Algorithm

[알고리즘/Java] 백준 2346번: 풍선 터뜨리기

1. 문제 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 2. 연관 알고리즘 자료 구조(Data Structures) 덱(Deque) 3. 풀이 풍선이 원형으로 놓여있으므로 양방향으로 삽입/제거가 가능한 덱(Deque)을 활용해 상황을 가정할 것이다. 터뜨리는 데는 규칙이 따른다: ①첫 번째 풍선을 우선 터뜨리고 → ②해당 풍선에 든 종이에 적힌 값만큼 자리 이동한 뒤 → ③또 한 번 처음에 온 풍선을 터뜨린다. 더 이상 남..

Spring/Project

[Spring Boot/문구 쇼핑몰 프로젝트] Jasypt 활용 프로퍼티 암복호화

프로퍼티 암호화의 필요성을 절실히 느낀 건 소셜 로그인 기능을 구현하고서였다. 남 일 같지 않던 '개인키 노출로 인한 AWS 과금 이슈'를 접한 무렵이기도 했고, 로컬 단위의 소규모 프로젝트라 해도 클라이언트 ID/패스워드 및 API 키와 같은 중요 정보를 깃허브(GitHub)에 공개적으로 올려두는 건 무슨 이유에서든 엄두가 나지 않았다. 실사용 DB 등을 다룰 나중을 위해서라도 암호화에 대한 학습이 당장 필요해진 셈이었는데, 어디 여쭐 곳 없이 구글링하던 중 발견한 방법이 바로 Jasypt였다. 1. Jasypt ❗ Jasypt(Java Simplified Encryption)는 개발자로 하여금 암호화 과정이 어떻게 치러지는지에 대한 깊은 지식 없이도 최소한의 노력을 들여 기본적인 암호화 기능을 추가할..

Algorithm

[알고리즘/Java] 백준 1021번: 회전하는 큐

1. 문제 https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 2. 연관 알고리즘 자료 구조(Data Structures) 덱(Deque) 3. 풀이 ❗ Deque(Double-Ended Queue)란, 데이터 삽입/제거 과정이 양방향 모두에서 가능하도록 구현된 큐(Queue)이다. 한편, 큐(Queue)는 일렬로 늘어선 줄이나 번호표가 주어진 은행 창구처럼 먼저 들어온 데이터가 먼저 나가는(FIFO, First In First Out) 형태로..

Algorithm

[알고리즘/Java] 백준 14928번: 큰 수 (BIG)

1. 문제 https://www.acmicpc.net/problem/14928 14928번: 큰 수 (BIG) 첫째 줄에 제연이가 가장 좋아하는 수 N이 주어진다. (N ≤ 101,000,000) www.acmicpc.net 2. 연관 알고리즘 수학(Mathematics) 사칙연산(Arithmetic) 임의 정밀도 / 큰 수 연산(Arbitrary Precision / Big Integers) 3. 풀이 3-1. 시간 초과 BigInteger N = new BigInteger(br.readLine()); BigInteger M = new BigInteger("20000303"); bw.append(N.remainder(M) + "\n"); 지문에서 10의 100만 제곱인 큰 수를 사용한다기에 BigInt..

개발노트/GitHub

[GitHub/Python] 프로필에 최근 블로그 게시글 목록 불러오기

깃허브(GitHub)와 블로그는 단순한 기록용에 그치지 않고, 개발자로 하여금 자신을 정의하는 수단으로도 쓰이고 있다. 하지만 이들을 꾸준히 관리하는 게 여간 쉬운 일이 아니다. 바로 그런 이유에서 그들의 성실성을 대변하는 역할을 톡톡히 수행하고 있기도 하지만 말이다😓 특히 프로젝트에 전념하는 동안엔 나 역시 어느 한쪽만 관리하는 데 치우치게 됐기에, 둘을 연동해 최근 활동 기록을 한 눈에 확인할 수 있다면 다른 하나가 마냥 방치되는 문제는 줄일 수 있지 않을까 하는 기대에서 관련 기능을 추가하고 싶었다. ①깃허브(GitHub) 프로필 README.md 파일에 최근 블로그 게시글을 원하는 개수만큼 불러오고, ②새 게시글이 작성되면 이를 깃허브(GitHub)에 커밋해(commit) 반영되게끔 만드는 방법은..

개발노트

[Spring/Exception] 535-5.7.8 Username and Password not accepted

javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted 구글(Google)은 지난 2022년 5월 30일부터 '보안 수준이 낮은 앱'을 더 이상 지원하지 않는다: https://support.google.com/accounts/answer/6010255 기존에는 메일 발송을 치르기 위해 '보안 수준이 낮은 앱의 액세스'만 기본값 '사용 안 함'에서 '사용함'으로 바꿨다면, 이제는 해당 설정을 대신할 방법이 필요해진 것이다. 방법은 다음과 같다. 예외메시지. 535-5.7.8 Username and Password not accepted ✅ 해결방법: 발송 주체가 되는 계정으로 로그인한 후 ①'Google ..

@reminder
'분류 전체보기' 카테고리의 글 목록