일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Hackathon
- Payload
- forloop
- Signature
- 나동빈
- 우테코
- 딕셔너리
- 이것이취업을위한코딩테스트다
- object
- loop
- nestJS
- 동빈북
- github action
- 우아한테크코스
- JWT
- equlas
- 동등성
- CMC
- 너디너리
- ssh-action
- 이코테
- makeus
- 컴공선배
- HashCode
- 동일성
- 라이징캠프
- 해커톤
- 왕실의나이트
- CICD
- remove
- Today
- Total
목록공부기록 (15)
iamjooon2님의 블로그

집사의고민 프로젝트의 기능 개발은 완료되었고, 이제 리팩터링 및 성능 개선을 고민하고 있는 상황입니다. 그러던 중, 쉽게 바뀌지 않는 API를 캐싱하는 것은 어떨까라는 생각이 들었는데요. 적용 과정과 선택한 기술에 대한 근거를 정리하고자 합니다. 그 전에, 캐시는 무엇일까요 공대생의 친구, 위키백과에게 물어봤습니다 캐시(cache, 문화어: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다. 라고 합니다. 제..

우아한테크코스 방학을 맞아, 여유롭게 레벨 2 내용을 정리하고 있다. 미션 진행 중 리뷰어님께서 남겨준 AutoBoxing, AutoUnBoxing에 대해 직접 실험해보려 한다. 이전까지 내가 알고 있던 것은 Wrapper 클래스를 사용하면 AutoBoxing과 AutoUnBoxing을 하는 과정에서 성능 차이가 발생한다는 것이었다. 하지만 그 차이가 얼마나 유의미하게 차이나는지는 몰라, 내 두 눈으로 직접 보려고 한다! GPT와의 페어프로그래밍으로 아래와 같은 코드를 뽑아냈다...! public class AutoBoxingTest { public static void main(String[] args) { int[] primitiveArray = new int[1_000_000]; Integer[] ..
// for loop List cards = new ArrayList(); for (Denomination denomination : Denomination.values()) { for (Suit suit : Suit.values()) { cards.add(new Card(denomination, suit)); } } // stream final List = Arrays.stream(Denomination.values()) .flatMap(denomination -> Arrays.stream(Suit.values()) .map(suit -> new Card(denomination, suit))) .collect(Collectors.toUnmodifiableList());

저번 포스트에서 HandlerInterceptor를 적용한 것까지 포스팅했습니다. 컨트롤러에서의 반복되는 인증 작업은 줄일 수 있었지만, 여전히 토큰에서 수출한 사용자 정보가 필요한 상황이었습니다 이는 ArgumentResolver와 커스텀 어노테이션을 이용하여 해결할 수 있었습니다! 먼저, 커스텀 어노테이션부터 한 번 확인해보곘습니다 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface AuthPrincipal { } AuthPrincipl이라는 임의의 어노테이션을 만들어주었습니다. @Target(ElementType.PARAMETER)를 통해 메서드의 파라미터에서 사용할 수 있도록 적용해주었고 @Rete..

우아한테크코스 장바구니 미션 수행 중, 요구사항으로 인증 기능 구현이 있었습니다. 사용자 정보는 요청 Header의 Authorization 필드를 사용해 인증 처리를 하여 얻습니다. 인증 방식은 Basic 인증을 사용합니다. 예시) Authorization: Basic ZW1haWxAZW1haWwuY29tOnBhc3N3b3Jk type: Basic credentials : email:password를 base64로 인코딩한 문자열 ex) email@email.com:password -> ZW1haWxAZW1haWwuY29tOnBhc3N3b3Jk 처음 구현한 코드부터 같이 보겠습니다. 컨트롤러 부분은 다음과 같습니다. @RestController public CartController { // 필드 및 ..

Spring MVC 구조를 공부하고 있었다. 위와 같은 구조로, Dispatcher Servlet이란 놈이 중심이 되어 일을 하고 있었다. 열정맨 디스패쳐 서블렛... 이놈은 대체 무슨 놈일지 궁금해서 찾아본 것을 정리해보려 한다. 1. Servlet은 뭘까? Dispatcher Servlet에 대해 알기 전에, Servlet부터 알아보자. Dispathcer는 '보내다, 파견하다'라는 뜻을 가지고 있다. 그럼 Servlet은 뭘까? 자바 서블릿은, 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다. 흔히 서블릿이라고 부른다. 출처: 위키백과 본명은 Java Servelt이고, 자바에서 HTTP 기술을 사용하기 위해 쓰는 놈이다 2. Dispatcher Servlet, ..

웹 자동차 경주 미션을 하며, @RestController 어노테이션만 붙이면 스프링이 알아서 해당하는 요청 경로를 찾아주는게 너무 신기했다. 그래서 이 웹 MVC의 구조를 찾아보며 정리해보려 한다. 클라이언트로부터 요청이 들어오면(1번), 디스패쳐 서블렛은 그 요청을 처리하기 위한 컨트롤러 객체를 검색한다 이때 디스패쳐 서블렛은 직접 컨트롤러를 검색하지 않고 핸들러 매핑이라는 빈 객체에 컨트롤러 검색을 요청한다.(2번 과정) 핸들러매핑은 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 디스패쳐 서블렛에 전달한다.(3번 과정) 예를 들어 웹 요청 경로가 '/plays'라면 등록된 컨트롤러 빈에서 '/plays' 요청 경로를 처리할 컨트롤러를 리턴한다. 이때, 컨트롤러 객체를 디스패쳐 서..
Java의 final은 크게 변수, 메서드, 클래스에 붙여줄 수 있는 키워드이다 이 final이 붙은 대상은, 재할당이 불가능하다 (불변을 의미하진 않는다) final은 변수에서 다음과 같이 사용할 수 있다 예시는 자동차 경주 게임이다. public class Car { private static final THROTTLE = 4; // 상수에 사용 private final String owner; // 재할당 불가 private int position; // 재할당 가능 public Car(final String name) { // 파라미터에도 붙일 수 있음 this.owner = name; this.position = 0; } public void move(final int power) { if (p..
우아한테크코스에서 페어프로그래밍을 진행하며 얻을 수 있는 큰 장점은 페어의 지식을 흡수할 수 있다는 것과, 다양한 코드 스타일을 알 수 있다는 것이다. 또한 내가 무의식적으로 사용하던 것들을 설명할 수 있어야 하는데 이 과정에서 내가 알고 있는 것이 진짜 알고 있는 것이 아니라는 것 역시 알게 된다. 방어적 복사에 대해 알게 된 것도 이 페어프로그래밍 덕분이다 무의식적으로 getter를 자동완성으로 만들었는데, 페어가 '방어적 복사로 감싸서 보내자!'고 의견을 냈다 그리고 난 대답하지 못했다.... 그래서 방어적 복사는 뭘까? 코드와 함께 보자 public class Player { private final String name; private List cards; public Player(String ..
우아한테크코스 적응하는데 시간이 꽤 걸렸다 어느정도 적응했으니, 그동안 기술부채로 남겨둔 궁금한 것들을 시간나는대로 모두 정리할 것이다 이 블로그는 흔하디 흔한 개발자 이력서에 적을 보여주기식 블로그가 아닌 내가 다시 보고 싶어서, 내 멋대로 정리하고 적는 글들의 집합이다 잘 알아서 적는 것이 아닌, 잘 알고싶어서 쓰는 글들이다. 아무도 안보겠지만, 혹시 틀린 것이 있다면 지적해주시면 감사하겠습니다. 모든 원시값을 포장하라 우아한테크코스에서 강조하는 객체지향 생활체조 9가지 중 하나이다 저 요구사항을 만족시키기 위해 포장한 VO를 볼 때마다, 항상 equals, hashcode가 재정의 되어있었다 그리고 이에 대해 찾아보면 동일성과 동등성이라는 키워드가 꼭 하나씩 붙어있다 이건 대체 뭘까? 이름이라는 S..