https://github.com/lhoju0158

전체 글 48

[우테코] 8기 프리코스 자유주제 회고

3주차 과제에 대한 회고가 우선이지만.. 시간이 많이 지났고 그것보단 자유주제에 대한 회고를 쓰는게 좋을 듯 하여 넘깁니당.. 자유주제 정하기이번 기수는 이전 기수와 다르게 자유 주제가 추가되었다. 말 그래도 자유 주제이다.. 음, 프리코스 기간 가장 크게 깨달은 건 기초의 부족이었다. 그러면서 느낀건.. 나는 Spring은 잘 알고 쓰나 라는 생각이었다. 올해 프로젝트에 참여하며 Spring을 사용했지만, 어떤 구조를 가지고 있는지. 어떤 기능을 지원하는지 잘 모른다. 그래서 정한 주제는.. Spring 구현 프로젝트이다! (두둥) 하지만.. 혼자 하긴 양이 방대하다 생각해 프리코스에 참여하지 않는 팀원 한 명과 같이 진행했다. (문의사항에 보니 외부 팀원이어도 상관 없다 해서 함께함) 평소 알던 선배..

[JUnit5] 테스트 인스턴스 생성 시점?

들어가며.. 테스트 코드에선 객체 생성 비용에 대해 고민하지 않았다. (약간 한 대 맞은 기분..) 따라서 이에 대해 학습하고 싶었다. 테스트 인스턴스 라이플 사이클공식 문서에 따르면.. 테스트 인스턴스의 상태는 불변이 아니므로 예기치못한 부작용이 발생할 위험이 있다.이러한 위험을 피하고, 각 테스트 메서드를 격리해서 실행하기 위해서 JUnit은 각 테스트 메서드를 실행하기 전에 해당 테스트 클래스의 인스턴스를 새로 만든다.각 테스트 메서드 마다(per-method) 새로운 테스트 인스턴스가 만들어지는 것은 JUnit의 기본 동작방식이다.라고 적혀있다. 즉, 기본값이 메서드 마다 새로운 테스트 인스턴스 생성이다. 그러면 여기서 질문.. @BeforeAll은 어떻게 실행되는가? 참고로 @Before..

개발 끄적끄적 2025.10.27

camp.nextstep.edu.missionutils 분석 + utils 패키지는 어떤 역할을 할까? + 난수는 어떤 원리로 생성될까?

들어가며..이렇게 내부를 확인하지 않고 라이브러리를 사용했다. 앞으로는 사용을 정확하게 하기 위해 내부를 분석하려 한다.구조camp.nextstep.edu.missionutils는 3개의 클래스로 이루어져 있다.각각 알아보자Consolepackage camp.nextstep.edu.missionutils;import java.util.Scanner;public class Console { private static Scanner scanner; private Console() { } public static String readLine() { return getInstance().nextLine(); } public static void close() { ..

[디자인 패턴] 추상 팩토리 패턴, 팩토리 메서드 패턴

new를 사용하는 것은 구상 클래스의 인스턴스를 만든는 것이다.만일 휴대폰이라는 인터페이스가 있고, 아이폰, 갤럭시를 원한다면Phone phone;phone = new IPhone(); // 아이폰이면phone = new Galaxy(); // 갤럭시면 그리고 IPhone과 Galaxy는 Phone을 구현한다.피자 가게 오픈피자가게에서 치즈, 그릭, 페페로니 피자를 만들고 싶다 하자.Pizza orderPizza(String type) { Pizza pizza; if(type.equals("cheese")) pizza = new CheesePizza(); else if(type.equals("greek")) pizza = new GreekPizza(); else..

개발 끄적끄적 2025.10.25

[Spring] Refresh Token, Access Token, Rotation을 이용한 로그인 구현 (OAuth2.0 + JWT)

진행하는 프로젝트에 로그인 기능을 구현하기 위해서 공부를 했다. 이전글들 참고 참고.. 프로젝트에 적용한 내용을 정리하려 한다. (좀 많이 늦긴 했지만..)1. Access Token과 Refresh Token인증 방식은 크게 세션과 토큰으로 나뉜다. 1. 세션 기반 사용자 인증 정보가 서버 메모리에 저장되는 방식 (DB가 아닌 서버 자체 메모리에 저장된다)2. 토큰 기반인증 정보는 클라이언트가 직접 들고 있다. 서버에선 해당 정보를 관리하지 않는다. 이 중 토큰 기반의 인증 방식을 채택했다. 서버리스 인증이 가능해 확장성의 이점을 가지기 때문이다.토큰 하나만으로 서버는 client가 유효한 사용자인지 알 수 있다. 그럼에도 왜 종류가 나뉘는 걸까? 일단 각각 알아보자.Access Token사용자의 인..

개발 끄적끄적 2025.09.14

[Network + Spring] URL 관련

지난번 URL 관련 에러가 발생했었다. Network 공부 하던 중 원인을 알 수 있어서 정리한다. 0. URL란브라우저가 정보를 찾는데 필요한 리소스의 위치를 가리킨다. URL를 이용해서 수십억개의 리소스를 찾고, 공유할 수 있다. 1. 안전한 전송정보가 유실될 위험 없이 URL을 전송할 수 있다는 것을 의미한다. 이를 위해서 사용할 수 있는 알파벳과 URL의 인코딩 규칙이 있다. 2. URL 규칙URL은 기본적으로 ASCII를 따른다. 그러나 최근엔 다른 나라 언어도 사용되기에, URL 설계자들은 URL에 이스케이프 문자열을 쓸 수 있게 설계했다. 이스케이프 문자열은 ASCII에서 사용이 금지된 문자들로, 특정 문자나 데이터를 인코딩할 수 있게 함으로써 이동성과 완성도를 높일 수 있다. 안전하지 ..

개발 끄적끄적 2025.08.19

[천체 관측] 계절이 지나가는 하늘에는 여름으로 가득 차 있습니다.

대학 천문관측 동아리에 가입했었다. 그 때 만난 사람들과 어쩌다보니 정기적으로 여름 휴가를 가게 됐다. 이번 여름도 별 보러 영천으로 갔다. 다행히 날이 좋아서 + 별에 대해 해박한 지식을 가지고 있는 선배와 함께해서, 다양한 관측을 할 수 있었다. 기본 아이폰으로 찍어도 잘 나왔다! 여름철엔 은하수를 관측할 수 있는데 맨눈으로 선명히 볼 수 있었다. 내가 본 밤하늘 중 별이 가장 잘 보였다. 선배가 망원경을 가져와서 성운, 성단도 볼 수 있었다. 다음은 망원경으로 찍은 사진이다. 1. M27 - 먹다 버린 사과 성운 먹다 버린 사과란 별명이 있는 성운이다. 이름 참 잘 지은 듯.. 맨눈으로 볼 땐 색이 선명하지 않았는데 DSLR로 찍으니 이렇게 잘 나왔다. 2. M57 - 고리 성운 말 그대로 ..

끄적끄적 2025.08.18

[Spring] cookie, token, session

1. 쿠키쿠키를 이용해서 서버는 브러우저에 데이터를 넣을 수 있다. 정보 기억을 목적으로해당 웹사이트에 정보를 보낼 때 마다, 브라우저는 해당 쿠키와 함께 요청을 한다. 보통 인증에 사용되지만, 그 외의 정보도 사용할 수 있다. 추가로 앱에는 쿠키가 없다. 브라우저에만 쿠키가 존재한다. 2. 세션Stateless라 함은 서버로 가능 모든 요청이 이전 요청과 독립적으로 다뤄진다는 뜻이다. 따라서 요청할 때마다 브라우전는 서버에게 정보를 알려줘야 한다. 그 때 세션을 이용한다. 만일 브라우저가 회원가입을 하면, 세션에 해당 정보를 저장하고 서버는 쿠키에 세션 정보를 담아서 브라우저에게 전달한다.이후 브라우저가 쿠키에 세션 정보를 담아서 서버에게 요청하면 서버는 세션을 확인해 유효성을 검증한다. 3 . J..

개발 끄적끄적 2025.08.08

[Spring] Security - JWT 서버 구축

관련 코드 깃허브https://github.com/lhoju0158/securityJwt1. JWT 구조 이해JWT 웹토큰이 뭐시냐JSON 객체로 안전하게 어떤 정보를 전송하기 위한 방식디지털 서명이 되어있어서 신뢰성 보장 가능하다. RSA 혹은 HMAC을 사용한다. 주로 서명의 용도로 사용한다! 구조는 xxxxx.yyyyy.zzzzzHeader - Payload - Signature로 이루어져 있음 - Header사용한 알고리즘 종류, type이 적혀있다. { "alg" : "HS256", "typ" : "JWT"} Based64Url로 인코딩되어 있어서 디코딩 가능하다. - Payload엔티티 및 추가 데이터에 대한 설명클레임은 3가지로 구성등록 된 클레임, 공개 소유권 주장, 개인 클레임개인 클레임..

개발 끄적끄적 2025.08.06

[Spring] Filter vs Interceptor

면접에서 받은 기술 질문이다. 그땐 대답을 못했다.. 똥멍텅구리 녀석. 그래서 알기 위해 적어본다. + JWT 사용을 원할히 하기 위해. 1. 필터 (Filter)Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가적인 작업을 처리하는 기능이다. +) Dispatcher Servlet은 뭐냐dispatch: 보내다 즉, 디스패처 서블릿은 http 프로토콜로 들어오는 모든 요청을 가장 먼자 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러다.클라이언트로 부터 어떤 요청이 온다!면 Tomcat과 같은 서블릿 컨테이너가 요청을 받는다. 그리고 이 요청을 디스패처 서블릿이 받는다. 암튼 다시 필터로 가서..Spring container의 관리 대상이 아닌 T..

개발 끄적끄적 2025.08.04