mgyo
-
About me
About me
2021.07.21Hi There 👋 Hello, I'm MINGYO KIM! I am a Software Engineer from South Korea 🇰🇷. I am interested in backend, data science and machine learning and Quant. If you want to contact me, please leave me a message! Please wait. Loading github.com/mgyokim ....
Hot
-
[백준] 25682번 체스판 다시 칠하기 2(feat. 2차원 배열의 누적 합)
[백준] 25682번 체스판 다시 칠하기 2(feat. 2차원 배열의 누적 합)
2023.01.16https://www.acmicpc.net/problem/25682 문제 접근 첫 번째 단계 문제의 조건은 다음과 같다. M * N 크기의 보드가 있는데, 어떤 정사각형은 검은색으로 칠해져있고, 나머지는 휜색으로 칠해져있음. 이 보드를 잘라서 K * K 크기의 체스판으로 만들려고함. 정상적인 체스판은 검은색과 휜색이 번갈아서 칠해져 있어야 함. 구체적으로, 각 칸이 검은색과 휜색 중 하나로 칠해져 있으면서, 변을 공유하는 두개의 사각형은 다른 색으로 칠해져 있어야 함. 이 정의를 따르면, 체스판을 색칠하는 경우는 두 가지 뿐이다. 1. 맨 왼쪽 위 칸이 휜색인 경우, 2. 맨 왼쪽 위 칸이 검은색인 경우 보드가 체스판 처럼 칠해져 있다는 보장이 없어서, M * N 크기의 보드를 K * K 로 자른 후, .. -
OpenSea 와 NFT (feat.CryptoPunks)
OpenSea 와 NFT (feat.CryptoPunks)
2022.01.30OpenSea를 통해 NFT에 대해 좀더 공부해보며 느낀점을 기록하려고 한다.우선, 나는 꽤 오래 전부터 블록체인, NFT등에 관심이 있었다.그러한 관심은 내가 좀더 NFT를 알아감에 있어서 부정적인 시선으로 바뀌어 가고 있었다.왜냐하면, NFT가 사용되는 세계인 "메타버스"라는 단어자체는, 가상세계와 다를바가 없어보였기 때문이다.해당 워딩은, "메타버스"라는 섹터를 만들어서 사람들의(투자자) 관심을 유도한 후, 주가 띄우기에 활용되는 것 뿐 이라는 생각이 들었다."메타버스" 또는 "NFT"라는 워딩을 언급한 기업의 주가는 상상이상으로 높게 치솟았고, "메타버스"와 직접적으로 관련이 있는 각종 게임주들, 그리고 엔터주들의 주가또한 엄청난 상승을 보여주었다.결국 "메타버스"와 "NFT"는 닷컴버블처럼 또다.. -
JPA 성능 최적화 (feat. @SequenceGenerator allocationSize)
JPA 성능 최적화 (feat. @SequenceGenerator allocationSize)
2023.04.09JPA 성능 최적화 (feat. @SequenceGenerator allocationSize) JPA의 기본 키 매핑을 들여다 보던 중, SEQUENCE 전략에 대해서 이해한 내용을 정리하려고 한다. Persistence Context에 대한 개념을 충분히 이해하고 있다는 가정하에 정리할 것이다. 우선, 기본키 매핑 전략으로 SEQUENCE를 사용하려면 @SequenceGenerator 를 생성해 주어야 한다. @Sequence의 속성은 아래와 같다. 속성들 중, allocationSize에 집중해보자. 성능 최적화에 사용되는 속성이다. allocationSize의 역할을 이해하려면, 먼저 SEQUECE전략의 기본적인 기본 키 매핑 과정을 이해해야한다. em.persist(member)가 호출 되면, m.. -
[백준] 9370번 미확인 도착지(feat. 다익스트라)
[백준] 9370번 미확인 도착지(feat. 다익스트라)
2023.01.21https://www.acmicpc.net/problem/9370 문제 분석 첫 번째 단계(문제 요약 및 조건 파악하기) 처음에, 이 문제를 읽고, 한번에 머리에 안들어와서 당황했다. 입력도 은근히 많았고 말이다. 호흡을 가다듬고, 다시한번 집중해서 읽으면서 중요한 부분을 요약했다. 이해하고나니, 별거 아니었다. 정리하자면, s 지점에서 출발하고, 목적지 후보들이 있고, 목적지에는 최단 거리로 가야한다. 경로와 관련된 조건이 있는데, g와 h 교차로 사이에 있는 도로를 무조건 지나가는 경로여야 한다. 목적지 후보들 중, 목적지로 불가능한 경우를 제외하고, 다른 목적지들을 공백으로 분리시켜 오름차순의 정수로 출력해야 하는 문제다. 입력을 풀어서 정리하면 아래와 같다. 테스트케이스 개수 n(교차로), m(도.. -
Legacy를 이전할건데, 테스트 코드를 작성하자고?
Legacy를 이전할건데, 테스트 코드를 작성하자고?
2024.08.06제목을 조금 자극적으로 써봤습니다.여러분은 테스트코드란 무엇이라고 생각하시나요?제가 소프트웨어 엔지니어로 일을 시작하고나서, 저에게 가장 큰 깨달음을 준건 "테스트코드" 입니다.대부분의 회사에 그렇듯 제가 재직중인 회사에도 Legacy 프로젝트가 존재합니다.여전히 Core 한 로직들이 Legacy 프로젝트에서 동작중이죠. 최근에 작성된 프로젝트들의 경우에는 테스트코드 커버리지가 꽤 높습니다.하지만, Legacy 프로젝트의 경우 테스트코드 커버리지가 거의 0에 가까웠습니다. Legacy 프로젝트는 코드를 읽고 완전한 로직을 파악하기까지 꽤나 많은 시간이 필요합니다. 코드가 서로 얽혀있고, 모듈화 되지 않았기 때문입니다. 그리고 통합 테스트 도구의 부족으로 FeatureTest, 그리고 UnitTest 조차.. -
[백준] 1904번 01타일(feat. 다이나믹 프로그래밍, 메모리 제한)
[백준] 1904번 01타일(feat. 다이나믹 프로그래밍, 메모리 제한)
2023.01.03https://www.acmicpc.net/problem/1904 문제 접근 첫번째 단계 문제의 조건을 정리하면 아래와 같다. 0과 1 타일이 있는데, 0타일은 00 이런식으로 두개씩 사용가능하다. 1타일은 낱개로 사용이 가능하다. N이 주어졌을 때, N크기의 2진수열을 만든다면, 만들 수 있는 수열의 갯수를 구하는 것이다. 예를 들어, n = 1일 때는 1만 단독으로 사용이 가능할 것이다. n = 2 일 때는 00 or 11 이렇게 구성이 가능할 것이다. 이번에는 n = 3일 때를 생각해보자. 세칸이 있는데, 해당 3칸을 1칸과 2칸으로 나누어 생각해본다면, n = 1일때와 n = 2 일때를 포함하고 있는 것을 파악할 수 있다. 1. 큰 문제를 작은 문제로 나눌 수 있다.(최적 부분 구조) n = 3일.. -
Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation)
Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation)
2023.06.19Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation) 문제 상황1. 유효기간이 긴 Refresh Token이 탈취된 경우-> 이 경우는 간단히 Refresh Token Rotation을 떠올릴 수 있다. 하지만 아래의 문제까지 커버가 가능할까?2. 탈취한 Refresh Token으로 정상 유저보다 먼저 Access Token을 재발급 받는 경우-> Refresh Token Rotation을 적용 해도, 정상유저보다 먼저 Refresh Token을 재발급 받으면 어떻게 해야하나?3. 토큰이 탈취된 경우, 한 명의 사용자에 Refresh Token이 여러개 생성되는 경우-> 여러개 생성된 Refresh Token을 가지고 각각 Access Token을 발급받을 수.. -
[백준] 1300번 K번째 수(feat. 이분 탐색 Lower-Bound)
[백준] 1300번 K번째 수(feat. 이분 탐색 Lower-Bound)
2022.05.10https://www.acmicpc.net/problem/1300 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 문제 접근 이 문제에서 주어진 N의 범위는 10^5, K의 범위는 min(10^9, N^2) 이기 때문에, 이분 탐색을 이용해야 할 것으로 예상된다. 이 문제를 간단하게 요약하면, A[i][j] = i*j 이고, 크기는 N*N 2차원 행렬을 1차원 배열 B로 만들 때, B[K]의 값은 무엇인지 구하는 문제이다. (단 인덱스는 1부터 시작한다. 라고 문제에 제시되어있음.. -
[백준] 1002번 터렛 python (두 원의 교점의 개수 구하기)
[백준] 1002번 터렛 python (두 원의 교점의 개수 구하기)
2022.01.22문제 조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다. 다음은 조규현과 백승환의 사진이다. 이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다. 조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다. 한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, ..
New
-
온보딩의 마무리 그리고 새로운 시작(NestJS & Prisma)
온보딩의 마무리 그리고 새로운 시작(NestJS & Prisma)
2024.11.04목차주제 선정요구 사항참고한 문서DB SchemaProject StructureAPI추가로 공유할 만한 내용마무리 주제 선정사내 노션을 확인하던 중, 도서 관리 문서를 발견했고, 해당 문서를 서비스화 해서 DB 로 도서 대여 히스토리 등을 관리하면 좋겠다는 생각이 들었습니다. 요구사항사내 노션의 도서 관리 문서에 존재하는 피쳐들을 그대로 이관할 수 있도록 구현하는 것을 최우선 순위로 하였습니다.로그인 기능도서 등록(구매 요청)도서 상태도서명도서 분야대여자신청자도서 상태값 변경등의 피쳐들이 존재합니다. 참고한 문서NestJS + Prisma 를 이용하여 Back-end Server 를 구현하였고, 앞으로 주로 사용하게 될, NestJS 와 Prisma 에 대한 정확한 내용을 파악하고자, 공식 문서를 참고.. -
Legacy를 이전할건데, 테스트 코드를 작성하자고?
Legacy를 이전할건데, 테스트 코드를 작성하자고?
2024.08.06제목을 조금 자극적으로 써봤습니다.여러분은 테스트코드란 무엇이라고 생각하시나요?제가 소프트웨어 엔지니어로 일을 시작하고나서, 저에게 가장 큰 깨달음을 준건 "테스트코드" 입니다.대부분의 회사에 그렇듯 제가 재직중인 회사에도 Legacy 프로젝트가 존재합니다.여전히 Core 한 로직들이 Legacy 프로젝트에서 동작중이죠. 최근에 작성된 프로젝트들의 경우에는 테스트코드 커버리지가 꽤 높습니다.하지만, Legacy 프로젝트의 경우 테스트코드 커버리지가 거의 0에 가까웠습니다. Legacy 프로젝트는 코드를 읽고 완전한 로직을 파악하기까지 꽤나 많은 시간이 필요합니다. 코드가 서로 얽혀있고, 모듈화 되지 않았기 때문입니다. 그리고 통합 테스트 도구의 부족으로 FeatureTest, 그리고 UnitTest 조차.. -
너 CORS 설정 해줬어? (Cross-Origin Resource Sharing)
너 CORS 설정 해줬어? (Cross-Origin Resource Sharing)
2023.06.22필자는 CORS 개념을 얼핏 들어보기만 했을뿐, 잘 몰랐엇다. 친구가 우연히 한 질문을 이해조차 못하는 나였고, 곧바로 CORS에 대해서 공부했다. 😂 이번 글에서는 CORS 개념을 이해하고 정리한다. CORS (Cross-Origin Resource Sharing)정의우선, 위키피디아에 CROS를 검색해보았다.CORS는, 웹 페이지 상의 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있도록 허용하는 메커니즘이다. 하지만, cross-domain 간의 요청은 기본적으로 Same-Origin Security Policy 에 의해 기본적으로 금지된다.(CORS를 지키면 SOP를 위반하더라도 예외적으로 공유가 가능 하다는 것.)쉽게 이야기하자면, 웹 생태계에는 다른 출처로의 리소스 .. -
Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation)
Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation)
2023.06.19Redis를 이용한 토큰 탈취 대응 시나리오(feat. Refresh Token Rotation) 문제 상황1. 유효기간이 긴 Refresh Token이 탈취된 경우-> 이 경우는 간단히 Refresh Token Rotation을 떠올릴 수 있다. 하지만 아래의 문제까지 커버가 가능할까?2. 탈취한 Refresh Token으로 정상 유저보다 먼저 Access Token을 재발급 받는 경우-> Refresh Token Rotation을 적용 해도, 정상유저보다 먼저 Refresh Token을 재발급 받으면 어떻게 해야하나?3. 토큰이 탈취된 경우, 한 명의 사용자에 Refresh Token이 여러개 생성되는 경우-> 여러개 생성된 Refresh Token을 가지고 각각 Access Token을 발급받을 수.. -
Redis를 사용하는 이유 (feat. Refresh Token)
Redis를 사용하는 이유 (feat. Refresh Token)
2023.06.18왜 Redis를 사용하는가? Redis는 key-value 쌍으로 데이터를 관리할 수 있는 데이터 스토리지이다. 데이터베이스라고 표현하지 않은 이유는 기본적으로 Redis는 In-Memory 로 데이터를 관리하므로, 저장된 데이터가 영속적이지 않기 때문이다. Redis는 Remote Dictionary Server의 약자로 키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진 비관계형(NoSQL) 데이터베이스 관리 시스템(DBMS)이다. 데이터가 HDD나 SDD가 아니라 RAM에 저장되어지기 때문에 데이터를 영구적으로 저장할 수 없는 대신, 굉장히 빠른 액세스 속도를 보장받을 수 있다. 빠른 액세스 속도와 휘발성 이라는 특징으로 보통 캐시의 용도로 Redis를 사용한다. Refresh Tok.. -
Access Token의 문제점과 Refresh Token
Access Token의 문제점과 Refresh Token
2023.06.17Access Token의 문제점 사용자의 잦은 로그아웃 경험 다음과 같이 가정하자. A라는 서비스가 있다. A라는 서비스에서는 Refresh Token을 사용중이지 않다. Access Token만을 사용하여 사용자를 인증/인가 한다. A서비스의 Access Token 유효기한은 24시간, 즉 하루다. 로그인을 한 이후 하루가 지나면, A 서비스의 사용자는 A 서비스에서 로그아웃 되는 경험을 하게 될 것이다. 그렇다고 Access Token의 유효 기간을 길게 하자니, 바로 뒤에 이야기할 보안 문제가 발생한다. 보안 문제 사실 Refresh Token을 사용하는 가장 큰 이유가 아닐까 싶다. JWT 직접 만들어보며 이해하기 와 세션 기반 인증과 토큰 기반 인증(feat. Authentication 과 Au..