일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Hackathon
- 해커톤
- github action
- makeus
- 컴공선배
- 동빈북
- remove
- 우테코
- 이것이취업을위한코딩테스트다
- loop
- Signature
- 왕실의나이트
- 우아한테크코스
- JWT
- object
- 나동빈
- 딕셔너리
- equlas
- 동등성
- 동일성
- nestJS
- ssh-action
- HashCode
- forloop
- 라이징캠프
- Payload
- CICD
- 이코테
- 너디너리
- CMC
- Today
- Total
목록전체 글 (39)
iamjooon2님의 블로그
우아한테크코스 레벨 3 프로젝트를 진행하면서, 테스트코드 작성을 새로 배우고 있다. 나는 크루들과 테스트에 관한 이야기를 나눌 때 마다 스스로를 클래시스트라고 말했다. 외부 API 사용 같이 '실제 객체를 테스트 할 수 없는 상황이 아니면, 연관된 모든 객체를 직접 테스트해야 그것이 진짜 테스트다'라고 생각했다. 일일히 메서드들을 모킹할 때마다 가독성이 떨어지고, 테스트 해야하는 메서드 하나를 위해, 연관된 수많은 메서드를 짜맞추는 것이 말이 안맞는다고 생각했다. 그렇게 난 레벨2 까지 Controller단은 RestAssured, Service와 Repository는 @SpringBootTest 어노테이션을 이용하여 테스트를 진행했다. 하지만 이런 내 신조는 레벨 3가 되어 아주 보기좋게 깨지고 말았다..

집사의고민 프로젝트를 진행하며, 카카오 로그인 기능을 맡게 되었습니다 이 과정에서 접한 OAuth 관련 개념과 용어들이 블로그마다 혼재되어있는 경우가 많아서, 많이 헷갈렸습니다🥲 이에 관련 개념을 제 언어로 정리하고, 구현하면서 가졌던 고민들을 정리해보려 합니다 먼저 공대생의 절친 위키백과에서 OAuth라는 단어의 뜻부터 한번 알아봅시다. OAuth("Open Authorization")는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다 네. 그렇다고 하네요 제 언어로 정리해보면, 우리 서비스에서 다른 서비스의 정보를 사용할 수 있는 권한을 위임받는 것..

우아한테크코스 방학을 맞아, 여유롭게 레벨 2 내용을 정리하고 있다. 미션 진행 중 리뷰어님께서 남겨준 AutoBoxing, AutoUnBoxing에 대해 직접 실험해보려 한다. 이전까지 내가 알고 있던 것은 Wrapper 클래스를 사용하면 AutoBoxing과 AutoUnBoxing을 하는 과정에서 성능 차이가 발생한다는 것이었다. 하지만 그 차이가 얼마나 유의미하게 차이나는지는 몰라, 내 두 눈으로 직접 보려고 한다! GPT와의 페어프로그래밍으로 아래와 같은 코드를 뽑아냈다...! public class AutoBoxingTest { public static void main(String[] args) { int[] primitiveArray = new int[1_000_000]; Integer[] ..
무심결에 썼던 @Transactional, @Transactional(readonly = true) 옵션들을 생각하며, 트랜잭션을 제 언어로 정리해보려 합니다. 1. Transaction? 위키백과에서는 다음과 같이 이야기합니다. *데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다...
// 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, ..

4월 19일 오전, 우아한테크코스 잠실 교육장에서 인프랩 CTO 이동욱님의 건강하게 나아지기 특강이 열렸다 강의 내용은 다음과 같다 자존감 기둥 만들기 뛰어난 동료, 새로운 환경, 프로젝트 실패 등 자존감이 떨어질 수 있다. 자존감이 무너지지 않도록 나를 지탱할 수 있는 기둥이 필요하다 (한 개가 아닌 여러개) 이동욱님의 자존감 기둥 글쓰기 커뮤니티 참여 전직장 동료와의 대화 운동 독서 멘토링 나만의학습 방법 찾기 회사를 다니면 ‘회사일의 숙련자’가 된다 회사를 길게 다닌다고 개발 전문가는 되지 않는다 나는 새로운 환경에서도 잘할 수 있는 사람인가? 나는 지속적으로 성장할 수 있는 사람인가? 지속적으로 고민할 것, 옆에 두어야 할 사람 옆에 두어야 할 사람은 지금 잘하는 사람이 아닌, 성장이 빠른 사람 ..

웹 자동차 경주 미션을 하며, @RestController 어노테이션만 붙이면 스프링이 알아서 해당하는 요청 경로를 찾아주는게 너무 신기했다. 그래서 이 웹 MVC의 구조를 찾아보며 정리해보려 한다. 클라이언트로부터 요청이 들어오면(1번), 디스패쳐 서블렛은 그 요청을 처리하기 위한 컨트롤러 객체를 검색한다 이때 디스패쳐 서블렛은 직접 컨트롤러를 검색하지 않고 핸들러 매핑이라는 빈 객체에 컨트롤러 검색을 요청한다.(2번 과정) 핸들러매핑은 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 디스패쳐 서블렛에 전달한다.(3번 과정) 예를 들어 웹 요청 경로가 '/plays'라면 등록된 컨트롤러 빈에서 '/plays' 요청 경로를 처리할 컨트롤러를 리턴한다. 이때, 컨트롤러 객체를 디스패쳐 서..