| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 코딩 테스트
- 자료구조
- 디프만
- c
- 상속
- 연습문제
- 디프만16기
- AOP
- 객체지향
- flutter
- 다형성
- 운영체제
- kakao
- Oidc
- depromeet
- C언어
- 코딩
- Spring
- pub.dev
- Kotlin
- dip
- 코딩테스트
- 부하 테스트
- Sharding
- nGrinder
- OAuth
- 코드트리
- 코드 트리
- java
- Redis
- Today
- Total
목록전체 글 (70)
Nick Dev
홈서버 네트워크 설정 가이드1. Tailscale 설치 및 설정VPN - 내부 전용 접근용도어디서든 안전하게 내 서버에 직접 접속1.1 Tailscale 설치# Tailscale 설치curl -fsSL | sh# Tailscale 시작 및 인증sudo tailscale up# 상태 확인tailscale statustailscale ip -41.2 Tailscale 자동 시작 설정# 서비스 활성화sudo systemctl enable tailscaledsudo systemctl start tailscaled2. Nginx 설치 및 설정reverse proxy - 내부 라우터용도한 서버에서 여러 서비스를 도메인별로 분배2.1 Nginx 설치# Nginx 설치sudo apt updatesudo apt ins..
공부하게 된 이유순수 Java 활용한 WAS 구현 과제를 진행하면서 예외 처리 공통화 부분을 구현하려고 했다.기존에 SpringBoot 활용해서 개발했을 때는 @ExceptionHandler 구현하고 그냥 어디서든지 예외 던지면 “알아서” 이 핸들러가 동작해서 예외에 대한 ResponseEntity를 만들어서 반환했다.이걸 직접 구현하려니깐 저 “알아서”가 어떻게 되는건지 궁금해졌다.그래서 Spring의 예외 핸들링 과정을 알아보쟈가정아래와 같이 커스텀 예외를 구현하고, 글로벌로 예외를 처리하는 예외 처리기 있다는 가정커스텀 예외애플리케이션 전반에서 사용되는 예외@Getterpublic class ApiException extends RuntimeException { private final Err..
상속으로 재사용을 구현하게 되면 몇 가지 문제가 발생한다. 그래서 상속 말고 객체 조립을 통해 재사용을 구현하자.상속 단점 3가지1. 상위 클래스 변경 어려움class BasicStorage { public void save(String fileName, String data) { System.out.println("파일 저장: " + fileName); // 기본 저장 로직 }}class CompressedStorage extends BasicStorage { @Override public void save(String fileName, String data) { System.out.println("데이터 압축 중..."); // ..
다형성과 상속다형성이란?한 객체가 여러 타입을 가질 수 있는 것인터페이스 상속순전히 타입 정의만 상속, 다중 상속을 지원하지 않는 Java에서는 interface를 이용해 객체가 다형을 갖는다.구현 상속상위 클래스에 정의된 메서드들을 재사용하기 위한 목적 → 오버라이딩추상화추상화란?데이터 or 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의하는 과정실제 사물을 모델링하는 과정(모델링 결과는 주로 클래스)이미지 업로드 추상화AWS S3 버킷에 이미지 저장하기NCP 버킷에 이미지 저장하기로컬 디렉토리에 이미지 저장하기⇒ 이 세 기능을 추상화하면 ‘이미지 저장’ 이라는 개념으로 정의할 수 있음타입 추상화 interface ImageSave { public void save(Image img); ..
객체지향적으로 코드를 작성해야 하는 이유는 뭘까?데이터와 그 데이터를 사용하는 기능을 한 객체로 묶음으로써, 객체를 사용하는 다른 코드에 영향을 최소화하면서 객체 내부 구현 변경할 수 있는 유연함. 즉, 구현 변경의 유연함을 가질 수 있기 때문이다.→ 변경 지점을 최대한 한 곳으로 모은다객체지향적이지 않은 방식class StudentData { private String name; private int koreanScore; private int englishScore; private int mathScore;}public class StudentDataService { // 평균 계산을 외부에서 직접 처리 public double calculateAvg(StudentData st) { return (..
이벤트 처리를 통해 관심사 분리1분단위 스케줄링을 피하기 위한 동적 스케줄러 도입Elastic APM을 활용해 미리 병목 가능 지점 파악1. 이벤트 기반 아키텍처 사용의 이점1-1. 컴포넌트 간의 결합도 감소// TaskService.java에서 - 이벤트 발행자는 이벤트 핸들러에 대해 알 필요가 없음eventPublisher.publishEvent(DeleteTaskNotificationEvent(memberId, taskId));TaskService는 어떤 컴포넌트가 이벤트를 처리할지, 어떻게 처리될지 알 필요 없이 이벤트를 발행합니다.이는 시스템의 다른 부분 간에 느슨한 결합을 생성하여 코드를 더 모듈화하고 유지보수하기 쉽게 만듭니다.1-2. 관심사의 분리// PushNotificationListe..
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..