일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Redis
- Sharding
- Kotlin
- 코딩테스트
- OAuth
- c
- dip
- nGrinder
- Oidc
- 연습문제
- Kafka
- 코드 트리
- kakao
- 자료구조
- AOP
- java
- exception
- 부하 테스트
- pub.dev
- flutter
- 코딩 테스트
- hashmap
- login
- 운영체제
- 코드트리
- 코딩
- Scaffold
- Spring
- thread
- C언어
- Today
- Total
목록전체 글 (65)
Nick Dev
4장 연결 리스트 연습문제01. 연결 리스트를 사용하기에 적합한 경우는?자료를 정렬하는 경우자료를 역순으로 처리하는 경우자료의 삽입과 삭제가 많은 경우자료를 탐색하는 경우Ans: 302. 연결 리스트에 대한 설명으로 거리가 먼 것은?노드의 삽입과 삭제가 쉽다.노드들이 포인터로 연결되어 있어 탐색이 빠르다.연결해 주는 포인터를 위한 추가 공간이 필요하다.연결 리스트 중에서 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 어렵다.Ans: 203. 다음과 같은 단순 연결 리스트에 대해, 아래와 같은 C 언어로 작성된 프로그램을 수행한 후 포인터 tmp가 가리키는 노드는?가나다라Ans: 204. n개의 데이터로 구성된 선형 리스트를 단순 연결 리스트로 표현하고자 한다. 다음 중 시간 복잡도가 가장 낮은 연산은?..
프로젝트 githubCICD 흐름CI 흐름develop 브랜치에 push 일어나면 아래 flow가 실행gradle로 spring boot 프로젝트 builddocker image 생성 후, docker hub에 업로드CD 흐름클라우드 서버에 ssh로 접속docker hub에서 image 최신화 & github secret에 있는 환경변수 가져오기서버에 작성해둔 docker-compose 실행 (기존 컨테이너 죽이고 실행)DEV 환경용 CICD yaml 파일name: "[DEV] SPURT API CI/CD"on: push: branches: [ develop ]jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checko..

목차카카오 OIDC 소셜 로그인 구현하기(이론편)인증 서버로 요청 보내는 client 선택하기 (Feign VS RestTemplate VS RestClient VS WebClient)카카오 OIDC 소셜 로그인 구현하기(구현편)JWT 기반 인증 구현하기이제 우리 서비스용 JWT 토큰(access, refresh token)을 발행해보자 Jwt 토큰 생성 로직별 거 없다그냥 코드 내용 처럼 memberId와 유효기간으로 토큰 생성하면 된다.만약 memberId 외에 name, email 등을 추가하고 싶으면 Jwts.Builder()에 .addClaims()로 추가하면 된다.jwt: header: Authorization secret: weqrwfsdafewjkdshkjghdsajkhvdsjakvhj..

기술 스택 : Kotlin + Spring Boot + Spring Security(OAuth에 적용 X)목차카카오 OIDC 소셜 로그인 구현하기(이론편)인증 서버로 요청 보내는 client 선택하기 (Feign VS RestTemplate VS RestClient VS WebClient)카카오 OIDC 소셜 로그인 구현하기(구현편)JWT 기반 인증 구현하기이제부터는 Kakao OIDC를 구현해보자!클래스 다이어 그램👨💻OAuthClientFactory매개변수로 들어온 provider에 맞는 OAuthClient 반환KAKAO → OAuthClient(구현체 : KakaoOAuthClient)GOOGLE → OAuthClient(구현쳬 : GoogleOAuthClient)👨💻OAuthClien..
기술 스택 : Kotlin + Spring Boot + Spring Security(OAuth에 적용 X)목차카카오 OIDC 소셜 로그인 구현하기(이론편)인증 서버로 요청 보내는 client 선택하기 (Feign VS RestTemplate VS RestClient VS WebClient)카카오 OIDC 소셜 로그인 구현하기(구현편)JWT 기반 인증 구현하기OverviewOAuth를 구현하기 위해서는 Provider(Kakao, Google, ...) 등의 인증 서버에 요청을 보내야 된다!Spring에서는 외부 API 호출할 Client가 여러 종류가 존재한다.종류 별로 간단한 비교 및 Feign Client를 선택한 이유에 대해 말하려고 한다.Client 종류 4가지RestTemplateRestClie..

목차카카오 OIDC 소셜 로그인 구현하기(이론편)인증 서버로 요청 보내는 client 선택하기 (Feign VS RestTemplate VS RestClient VS WebClient)카카오 OIDC 소셜 로그인 구현하기(구현편)JWT 기반 인증 구현하기OIDC란?OpenID Connect는 OAuth 2.0 위에 구축된 인증 레이어로, 사용자의 신원을 확인하는 표준화된 방법을 제공한다.왜 쓰는거야?외부 호출 API 횟수를 절반으로 줄일려고기존에는 아래 사진과 같이 인가 코드로 액세스 토큰을 발급받고, 이 액세스 토큰으로 사용자 정보를 다시 요청해야 해당 유저의 정보를 가져올 수 있다.즉, 서비스 서버에서 총 2번의 API를 호출해야 된다.하지만 OIDC는 딱 1번 호출해서 유저의 정보를 알아낼 수 있다..

1차 MVP를 1주일정도만에 개발한 후에 바로 베타 테스트를 위해 간단하게 홍보를 진행했다.1500명 인원이 있는 오픈 채팅방에 허락을 받고 홍보를 진행했다..처음으로 내 서비스를 제대로 공개하는거라 굉장히 부끄러웠지만 그래도 눈 한번 딱 감고 해봤다홍보하기..영광(?)스럽게 공지로 등록해주심...오픈 채팅방 사람들의 귀중한 Feedback내가 웹페이지 만들어놓은 피드백 모달을 통해 들어온 것들Slack의 Webhook 기능을 통해 유저가 피드백을 등록하면 내 slack에 오도록 설정해놨다이룬 성과?애초에 Google Analytics를 달아놓고 배포해서 대략적인 방문자 수를 확인할 수 있었다!!!총 방문자 수가 무려 180명!!!!!사실 홍보빨인건 안다... 홍보를 안하니깐 매우 급격하게 떨어진다..ㅋ..

MongoDB 선택 이유MongoDB를 선택한 이유는 크게 2가지이다.커리큘럼 데이터의 구조데이터 조회 패턴1. 커리큘럼 데이터의 구조"curriculum": [ { "title": "강의 소개 및 실습 환경 구성", "units": [ { "_id": newNumberLong("123574"), "title": "강의 소개", "runtime": newNumberInt("437") }, { "_id": newNumberLong("125608"), "title": "강의 커리큘럼 및 실습 코드 소개", "runtime": newNumberInt("3..

| 서비스 URL : https://make-curriculum.vercel.app/📌 서비스를 만들게 된 계기인프런 등에서 강의를 듣게 될 때마다 각 강의의 runtime, 내 공부 계획 등을 고려해서 하루에 얼마나 무슨 강의를 들으면 되는지 계획을 세웠다.매번 이렇게 계획을 짜기 너무 귀찮았다. 개발자라면, 이런건 자동화 해야지!근데 이왕 할거, 서비스로 간단하게 만들어서 배포해보자!! 라는 생각으로 만들게 되었다...ㅋㅋ⭐️ 서비스 기능1️⃣ 강의 검색이 강의 목록은 내 서버의 DB에 저장된 인프런 강의들의 목록들이다.2️⃣ 강의 추가검색한 강의가 내 DB에 없다면 직접 인프런 강의의 URL을 복사해서 추가할 수 있다!추후에 인프런 사이트를 크롤링해 모든 강의를 미리 DB에 저장해둘 예정이다!3️..
코틀린 공부를 하다가 서비스 계층에서 @Transactional을 붙이니깐 빨간 밑줄이 뜨며 클래스와 함수를 open 해야 한다고 뜬다. 왜 그럴까??⭐️ 바로 @Transactional의 동작 방식 때문이다! ⭐️✅ @Transactional의 동작 방식Spring은 이 어노테이션이 붙은 클래스나 메서드에 대해서 Spring AOP를 통해서 프록시를 생성한다Spring AOP는 원본 클래스를 상속받아서 메서드 앞 뒤로 트랜잭션 관련 로직을 추가한다하지만 코틀린은 기본적으로 모든 클래스와 메서드가 final이다 (자바와 반대)자바는 기본적으로 모두 상속 가능한 상태고 명시적으로 final 키워드를 붙여서 막는다final 클래스(메서드)는 상속(오버라이드)가 불가능하다그렇기 때문에 Intellij가 "야 ..