| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 알고리즘
- mycli
- 오일러 경로
- 인프런워밍업클럽
- 터미널
- VI
- 네트워킹데이
- 티스토리챌린지
- mysql 표 출력
- 인프런
- spring boot
- Pager
- 동적 프로그래밍 방법
- zsh theme
- 이진탐색
- 분할정복 방법
- MySQL
- Less
- oh-my-zsh
- 오블완
- 스터디2기
- 순차탐색
- 맥
- cs
- 데이크스트라
- CS스터디
- table status
- 욕심쟁이 방법
- zsh
- mysql 표
- Today
- Total
목록분류 전체보기 (97)
Develop
안녕하세요 .ᐟ 알고리즘 기초 개념과 대표적인 설계 기법을 알아보겠습니다. 1. 알고리즘의 기본 개념알고리즘이란 주어진 문제를 해결하거나 함수를 계산하기 위해 따라야 할 명령어들을 단계적으로 나열한 것을 말합니다. 알고리즘의 성립 조건입출력: 0개 이상의 외부 입력과 1개 이상의 출력이 있어야 함.명확성: 각 명령은 모호하지 않고 단순 명확해야 함.유한성: 한정된 단계를 거친 후에는 반드시 종료되어야 함.유효성: 모든 명령은 컴퓨터에서 수행 가능해야 함.효율성: 실용적인 관점에서 알고리즘은 효율적이어야 함.주요 문제 예시오일러 경로(Eulerian Path): 그래프의 모든 간선을 오직 한 번씩만 지나는 경로입니다. 규칙 : 모든 정점의 차수가 홀수인 정점이 0개 또는 2개일 때 존재하며, 2개일 경우..
안녕하세요 .ᐟ 2025년이 가고 2026년 새해가 밝았습니다. 일단 저에 대해 소개 하고, 2025년에는 개발자가 되기 위해 어떤 노력을 했는지 돌아보겠습니다 .ᐟ저는 10년동안 사무직으로 직장생활을하고, Java 백엔드 개발자로 직무전환을 도전하고 있는 30대 취준생입니다.2023년 08월 개발이 하고싶어서 처음 맥북을 샀습니다. (그래서 블로그 이름도 230801)IT 서비스 기업에서 동료 개발자들의 말을 알아듣고싶었고, 그들이 멋있어 보였습니다.처음에는 직장인 신분으로 들을 수 있는 Python 기초 교육을 들었습니다. (2달 동안 토,일 주말 반납함)이 때 지역 개발자 커뮤니티에 가입하면서 용어에 익숙해지도록 환경을 바꾸고, 컨퍼런스, 세미나도 찾아 듣기 시작합니다.2024년 Java 로 언..
안녕하세요~ .ᐟ 회원가입 API를 테스트하다가 문제를 발견했습니다.이메일 인증 코드를 전송하는데 3.5초나 걸려서, 사용자가 회원가입 버튼을 누르고 3.5초 동안 기다려야 하는 상황이었습니다. 오늘은 이 문제를 Spring의 @Async를 사용해 해결하고, K6로 성능을 측정한 내용을 작성해보겠습니다. 결과 요약 : 3.5초 -> 0.08초로 개선함 문제 상황 : 회원가입 시 인증코드를 이메일로 발송하는 로직이 느림// 동기 방식회원가입 요청 → 인증코드 생성 → DB저장 → 이메일전송(5초 대기) → 응답ex) 응답 시간: 5초// 비동기 방식회원가입 요청 → 인증코드 생성 → DB저장 → 이메일전송 요청 → 즉시 응답 ↓ (백그라운드)..
안녕하세요 ~ .ᐟ 오늘은 Spring Boot에서 이메일 인증 시스템을 구현하는 방법을 정리해보겠습니다. 목표Gmail SMTP를 이용한 이메일 전송6자리 인증 코드 생성 및 검증인증 코드 만료 시간 관리 (10분)회원가입 전 이메일 인증 필수화 1. 의존성 추가Spring에서 이메일을 보내려면 spring-boot-starter-mail 의존성이 필요합니다.이 라이브러리는 JavaMailSender 인터페이스를 제공하여 SMTP 서버를 통한 이메일 발송을 가능하게 합니다.implementation 'org.springframework.boot:spring-boot-starter-mail' 2. Entity 설계verificationCode: 사용자에게 전송할 6자리 인증 코드expiryDate: ..
안녕하세요 ~ .ᐟ어제 만든 JWT 인증은 사용자가 누구인지 신원만 확인합니다.오늘은 무엇을 할 수 있는지 제어하는 역할 기반 권한 관리(Authorization)와 리소스 소유권 검증을 추가해보겠습니다.Spring Security의 @PreAuthorize를 사용해 메서드 레벨에서 권한을 검증게시글 작성자 본인만 수정/삭제할 수 있도록 소유권 검증 로직 추가 먼저 헷갈리기 쉬운 두 개념을 먼저 정리하고 가겠습니다.인증(Authentication) : 누구인지 → JWT 토큰으로 신원 확인인가(Authorization) : 뭘 할 수 있는지 → 역할(Role)과 소유권으로 권한 확인 1. Role Enum 개선기존에도 Role Enum 이 있었지만, 이번에는 각 역할을 지정해주었습니다.Spring Sec..
안녕하세요 ~ .ᐟ어제 게시판 프로젝트에 JWT 인증을 붙였는데 각종 테스트가 다 터지고, 스테이징 서버에 오류까지 나서 하루동안 잡았습니다 ㅎㅎ;;결론부터 말하면, JWT 설정 + Docker + MySQL + GitHub Actions가 전부 한 번씩 폭발하면서 몇 시간 동안 디버깅을 했고, 그 과정을 기록으로 남겨두려고 합니다. 이번 글에서 다루는 내용JWT 만료 시간 환경변수 바인딩 실패 (Failed to bind properties)Docker / docker-compose 환경변수 전달 이슈EC2 스테이징과 로컬에서 DB 호스트/스키마가 달라서 생긴 문제MySQL 8 인증 방식(Public Key Retrieval is not allowed) 이슈GitHub Actions, EC2, do..
안녕하세요 ~ .ᐟ 어제는 Spring Security 의 Basic 인증을 구현했습니다.Basic 인증은 매 요청마다 사용자명과 비밀번호를 Base64로 인코딩해서 보내야 하고, 서버에서 세션을 관리해야 하는 단점이 있었습니다. 그래서 오늘은 JWT를 이용한 무상태(Stateless) 인증 방식으로 전환을 해보겠습니다. 1. JWT (JSON Web Token) 란?정의JSON 형태의 정보를 안전하게 전송하기 위한 토큰구성헤더 (Header) : 토큰 타입과 알고리즘 정보페이로드 (Payload) : 실제 데이터 (사용자 이메일 등)서명 (Signature) : 토큰이 변조되지 않았음을 증명장점Stateless : 서버에 세션 저장 불필요확장성 좋음 (MSA 환경에 적합)모바일 앱에서 사용 편리토큰 자..
안녕하세요 ~ .ᐟ오늘은 Spring Security를 활용한 기본 로그인 기능을 구현했습니다. JWT는 내일 추가할 예정이고, 오늘은 Spring Security의 핵심 아키텍처를 이해하고 로그인 플로우를 보여드리겠습니다. 목차Spring Security 란?Spring Security 의 아키텍처 이해UserDetailsService 구현로그인 API 만들기테스트 결과 1. Spring Security 란?Spring 생태계의 인증/인가 프레임워크쉽게말하면 아래 두 가지를 처리해주는 도구"이 사람 누구야?" (인증, Authentication)"이 사람 이거 할 수 있어?" (인가, Authorization)장점검증된 보안 메커니즘을 쉽게 사용할 수 있음CSRF, XSS 등 보안 공격 자동 방어세션/..
안녕하세요 ~ .ᐟ오늘은 게시판 프로젝트가 2주차 되는날 입니다.내일부터 시큐리티 적용예정으로, 그동한 작성한 코드의 품질 개선과 배포 안정화 위주로 작업했습니다. 주요 작업1. 코드 리팩토링 (상수 관리, DTO 최적화)2. 예외 처리 개선 (ErrorCode 올바르게 사용)3. API 응답 통일 (ApiResponse)4. Blue-Green 배포 개선5. 테스트 커버리지 측정 (JaCoCo) 1. 코드 리팩토링매직 넘버와 문자열을 찾아내서 상수 클래스로 관리나중에 Page Size 를 바꾸고 싶을때 한곳만 수정하면 되기 때문에 상수 클래스로 분리했습니다.// Before// 여기저기 흩어진 10PageRequest.of(0, 10);// 또 다른 곳에서 10PageRequest.of(page, 10..
안녕하세요 ~ .ᐟ 게시글 목록을 조회할 때마다 DB 쿼리가 몇 번이나 실행될까요?단순히 생각하면 게시글 목록 1번 조회하면 끝일 것 같지만, 실제로는 예상보다 훨씬 많은 쿼리가 실행됩니다.이것이 바로 유명한 N+1 문제입니다. 이번 글에서는 N+1 문제가 무엇인지, 그리고 @EntityGraph와 Fetch Join 두 가지 해결 방법을 실제로 적용하고 비교해보겠습니다. N+1 문제란?문제 상황게시글 목록을 조회하면서 작성자 정보도 함께 보여줘야 하는 상황을 생각해봅시다.// 게시글 조회 (1번)List posts = postRepository.findAll();// 각 게시글의 작성자 이름 출력posts.forEach(post -> { System.out.println(post.getUser(..