분류 전체보기
-
카프카란 무엇인가?아파치 카프카(Apache Kafka)는 대용량 데이터 스트리밍을 처리하기 위한 오픈 소스 플랫폼으로, 분산형 메시지 큐 시스템이다. 2010년에 LinkedIn에서 개발된 후, 아파치 소프트웨어 재단에 기부되어 현재까지 널리 사용되고 있다. 카프카는 데이터 흐름을 관리하고 실시간 처리를 가능하게 하여, 다양한 데이터 소스와 애플리케이션 간의 연결을 효율적으로 지원한다. 카프카의 주요 구성요소프로듀서(Producer): 데이터를 카프카 클러스터에 전송하는 역할을 한다.컨슈머(Consumer): 카프카에서 데이터를 읽어오는 역할을 한다.브로커(Broker): 카프카 클러스터를 구성하는 서버로, 데이터를 저장하고 프로듀서와 컨슈머 간의 메시지를 중개한다.주제(Topic): 메시지가 저장되..
카프카 튜토리얼- 따라해보며 이해하기카프카란 무엇인가?아파치 카프카(Apache Kafka)는 대용량 데이터 스트리밍을 처리하기 위한 오픈 소스 플랫폼으로, 분산형 메시지 큐 시스템이다. 2010년에 LinkedIn에서 개발된 후, 아파치 소프트웨어 재단에 기부되어 현재까지 널리 사용되고 있다. 카프카는 데이터 흐름을 관리하고 실시간 처리를 가능하게 하여, 다양한 데이터 소스와 애플리케이션 간의 연결을 효율적으로 지원한다. 카프카의 주요 구성요소프로듀서(Producer): 데이터를 카프카 클러스터에 전송하는 역할을 한다.컨슈머(Consumer): 카프카에서 데이터를 읽어오는 역할을 한다.브로커(Broker): 카프카 클러스터를 구성하는 서버로, 데이터를 저장하고 프로듀서와 컨슈머 간의 메시지를 중개한다.주제(Topic): 메시지가 저장되..
2024.10.11 -
헥사고날 아키텍쳐위의 그림은 헥사고날 아키텍쳐를 검색하면 가장 많이 나오는 그림이다. 해당 그림만 볼 때는 어떤 걸 말하려는 거지? Port-Adapter 패턴을 활용해? 개발 주니어인 나에게 해당 그림은 어렵게만 다가왔었다. 사실 해당 내용은 그렇게 어렵지 않은 개념일 수도 있다. 결론만 말하면 기존 레이어 아키텍처에서 도메인 엔티티가 의존 해야 했던 객체들을 의존성 역전을 통해 가장 중요한 도메인을 메인으로 하여 개발이 이루어질 수 있도록 한 디자인 패턴이다. 위의 그림이 Port-Adapter 패턴을 잘 표현한 그림이라 할 수 있다. 하지만 특정 포트는 특정 업무를 담당해야 한다.(인터페이스를 통한 의존성 역전) 전자 기기들은 어떤 전자기기의 형태이든 상관없이 USB형태를 가지고 있으면 된다. 레..
헥사고날 아키텍처 with SpringBoot헥사고날 아키텍쳐위의 그림은 헥사고날 아키텍쳐를 검색하면 가장 많이 나오는 그림이다. 해당 그림만 볼 때는 어떤 걸 말하려는 거지? Port-Adapter 패턴을 활용해? 개발 주니어인 나에게 해당 그림은 어렵게만 다가왔었다. 사실 해당 내용은 그렇게 어렵지 않은 개념일 수도 있다. 결론만 말하면 기존 레이어 아키텍처에서 도메인 엔티티가 의존 해야 했던 객체들을 의존성 역전을 통해 가장 중요한 도메인을 메인으로 하여 개발이 이루어질 수 있도록 한 디자인 패턴이다. 위의 그림이 Port-Adapter 패턴을 잘 표현한 그림이라 할 수 있다. 하지만 특정 포트는 특정 업무를 담당해야 한다.(인터페이스를 통한 의존성 역전) 전자 기기들은 어떤 전자기기의 형태이든 상관없이 USB형태를 가지고 있으면 된다. 레..
2024.09.23 -
개요 인덱스 튜닝은 데이터베이스 성능 최적화의 중요한 부분으로, 인덱스를 효과적으로 사용하여 쿼리 성능을 향상시키는 작업이다. 인덱스는 데이터베이스 테이블의 특정 열에 대해 빠른 검색을 가능하게 하는 자료 구조이며, 올바르게 구성된 인덱스는 데이터 접근 시간을 크게 줄일 수 있다. MySQL을 기준으로 어떻게 기존 데이터베이스의 인덱스를 통해 속도, 성능을 개선할 수 있는지 알아보기로 했다. 옵티마이저 데이터베이스를 튜닝하기에 앞서 가장 먼저 알아야 할 요소는 옵티마이저이다.데이터베이스 관리 시스템(DBMS)의 핵심 구성 요소 중 하나로, SQL 쿼리의 실행 계획을 최적화하여 성능을 향상시키는 역할을 한다.파서를 통해 sql을 최소단위로 분리한 후, 옵티마이저를 통해 비용을 계산(join, sort, ..
[DATABASE, MYSQL]DB 인덱스, 쿼리 튜닝개요 인덱스 튜닝은 데이터베이스 성능 최적화의 중요한 부분으로, 인덱스를 효과적으로 사용하여 쿼리 성능을 향상시키는 작업이다. 인덱스는 데이터베이스 테이블의 특정 열에 대해 빠른 검색을 가능하게 하는 자료 구조이며, 올바르게 구성된 인덱스는 데이터 접근 시간을 크게 줄일 수 있다. MySQL을 기준으로 어떻게 기존 데이터베이스의 인덱스를 통해 속도, 성능을 개선할 수 있는지 알아보기로 했다. 옵티마이저 데이터베이스를 튜닝하기에 앞서 가장 먼저 알아야 할 요소는 옵티마이저이다.데이터베이스 관리 시스템(DBMS)의 핵심 구성 요소 중 하나로, SQL 쿼리의 실행 계획을 최적화하여 성능을 향상시키는 역할을 한다.파서를 통해 sql을 최소단위로 분리한 후, 옵티마이저를 통해 비용을 계산(join, sort, ..
2024.06.06 -
스프링 시큐리티 인증 및 권한처리 개요스프링에서 시큐리티를 활용한 인증 권한을 거치면 해당 사용자는 위 사진과 같은 과정을 통해 권한을 얻게 된다. 인증 / 인가 과정 중에 SecurityContextHolder 내부에 인증 객체를 저장하는데 이 인증 객체 내부에서 일반적으로 사용되는 UserDetails 내 getAuthorities()를 통해 해당 유저의 권한을 확인 할 수 있다. 코드를 통해서도 아래와 같은 방식으로 권한을 확인할 수 있다.if (authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"))) { redirectStrategy.sendRedirect(request, response, "/adm..
[Spring Security] 스프링 시큐리티 권한처리 하기스프링 시큐리티 인증 및 권한처리 개요스프링에서 시큐리티를 활용한 인증 권한을 거치면 해당 사용자는 위 사진과 같은 과정을 통해 권한을 얻게 된다. 인증 / 인가 과정 중에 SecurityContextHolder 내부에 인증 객체를 저장하는데 이 인증 객체 내부에서 일반적으로 사용되는 UserDetails 내 getAuthorities()를 통해 해당 유저의 권한을 확인 할 수 있다. 코드를 통해서도 아래와 같은 방식으로 권한을 확인할 수 있다.if (authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"))) { redirectStrategy.sendRedirect(request, response, "/adm..
2024.06.04 -
개요스프링 부트를 활용하여 채팅 기능이 포함된 프로젝트를 구현 하였다. STOMP를 활용했고, 스프링 시큐티리와 JWT를 통해 채팅 구현 내용과 사용자 인증 과정 및 코드를 공유한다. STOMP란?웹 소켓, TCP와 같이 양방향 네트워크 프로토콜 위에서 사용되는 서브 프로토콜이다. websocket을 통해 직접 구현하기 보다 메시지를 편리하게 사용하도록 구현되어 있는 STOMP를 활용하였다. 주요 특징 및 개념텍스트 기반 프로토콜:STOMP는 텍스트 기반 프로토콜로, 프레임(frame)이라고 불리는 명령어를 텍스트 형식으로 전달한다. 각 프레임은 명령어, 헤더, 본문으로 구성된다.프레임 구조:명령어(Command): CONNECT, SEND, SUBSCRIBE, UNSUBSCRIBE, BEGIN, CO..
[스프링 부트 + 시큐리티 + REST] STOMP를 통한 채팅 구현(JWT를 통한 사용자 인증)개요스프링 부트를 활용하여 채팅 기능이 포함된 프로젝트를 구현 하였다. STOMP를 활용했고, 스프링 시큐티리와 JWT를 통해 채팅 구현 내용과 사용자 인증 과정 및 코드를 공유한다. STOMP란?웹 소켓, TCP와 같이 양방향 네트워크 프로토콜 위에서 사용되는 서브 프로토콜이다. websocket을 통해 직접 구현하기 보다 메시지를 편리하게 사용하도록 구현되어 있는 STOMP를 활용하였다. 주요 특징 및 개념텍스트 기반 프로토콜:STOMP는 텍스트 기반 프로토콜로, 프레임(frame)이라고 불리는 명령어를 텍스트 형식으로 전달한다. 각 프레임은 명령어, 헤더, 본문으로 구성된다.프레임 구조:명령어(Command): CONNECT, SEND, SUBSCRIBE, UNSUBSCRIBE, BEGIN, CO..
2024.05.29 -
🎲문제 주소: 백준 1533 세준이는 정문이를 데리러 공항으로 가기로 했다. 하지만, 방금 세준이는 정문이의 비행기가 연착된다는 전화를 받았다. 세준이는 정문이가 정확하게 몇 분 늦는지 알고 있고, 그 시간 동안 밖에서 드라이브를 하려고 한다. 정문이가 늦는 시간을 T라고 하자. 세준이는 자기가 지금 있는 위치에서부터, 공항까지 정확하게 T분만에 도착하는 경로의 개수를 구하고 싶다. 길의 정보는 인접행렬로 주어진다. A[i][j]가 0이라면 i에서 j로 가는 길이 없는 것이고, A[i][j] ≤ 5라면, 정확히 그 만큼의 시간이 걸리는 i에서 j로 가는 길이 있는 것이다. 📲입력 첫째 줄에 교차점의 개수 N이 주어진다. N은 10보다 작거나 같고, 시작점의 위치 S와 끝점의 위치 E, 그리고 정문이가 늦..
백준 - 1533 길의 개수 JAVA🎲문제 주소: 백준 1533 세준이는 정문이를 데리러 공항으로 가기로 했다. 하지만, 방금 세준이는 정문이의 비행기가 연착된다는 전화를 받았다. 세준이는 정문이가 정확하게 몇 분 늦는지 알고 있고, 그 시간 동안 밖에서 드라이브를 하려고 한다. 정문이가 늦는 시간을 T라고 하자. 세준이는 자기가 지금 있는 위치에서부터, 공항까지 정확하게 T분만에 도착하는 경로의 개수를 구하고 싶다. 길의 정보는 인접행렬로 주어진다. A[i][j]가 0이라면 i에서 j로 가는 길이 없는 것이고, A[i][j] ≤ 5라면, 정확히 그 만큼의 시간이 걸리는 i에서 j로 가는 길이 있는 것이다. 📲입력 첫째 줄에 교차점의 개수 N이 주어진다. N은 10보다 작거나 같고, 시작점의 위치 S와 끝점의 위치 E, 그리고 정문이가 늦..
2024.01.29 -
개요 이전에 개발 동아리 홈페이지 제작 프로젝트 중에 깃허브를 활용하여 동아리 회원 인증을 하자는 의견으로 Github Oauth + RestAPI + JWT 구현 했던 내용을 정리한다. 굳이 Github OAuth를 사용해야 했던 이유 동아리의 모든 인원이 github가입이 필수 홈페이지에 github api와 연동해야 했음(깃허브 커밋시 활동 포인트 증가 기능) 소개 JWT의 동작의 장점은 따로 세션 서버를 구성하지 않고도 확장성이 뛰어나다는 점이다. 또한 토큰을 서버에서 관리하지 않고 클라이언트 쪽에서 관리하기 때문에 서버 쪽 부담이 적다. 기본적으로 스프링 시큐리티는 세션 기반으로 동작한다. 이를 JWT 기반 동작으로 변경해야 하는데, 시큐리티는 변화에 유연하기 때문에 기존 동작들을 사용자가 원하..
스프링 시큐리티 + Github Oauth + RESTAPI + JWT 활용(With Gradle)개요 이전에 개발 동아리 홈페이지 제작 프로젝트 중에 깃허브를 활용하여 동아리 회원 인증을 하자는 의견으로 Github Oauth + RestAPI + JWT 구현 했던 내용을 정리한다. 굳이 Github OAuth를 사용해야 했던 이유 동아리의 모든 인원이 github가입이 필수 홈페이지에 github api와 연동해야 했음(깃허브 커밋시 활동 포인트 증가 기능) 소개 JWT의 동작의 장점은 따로 세션 서버를 구성하지 않고도 확장성이 뛰어나다는 점이다. 또한 토큰을 서버에서 관리하지 않고 클라이언트 쪽에서 관리하기 때문에 서버 쪽 부담이 적다. 기본적으로 스프링 시큐리티는 세션 기반으로 동작한다. 이를 JWT 기반 동작으로 변경해야 하는데, 시큐리티는 변화에 유연하기 때문에 기존 동작들을 사용자가 원하..
2024.01.29 -
😒개요 기존 코드가 롬복의 @Builder를 사용하여 빌더 패턴을 구현했는데, 사용하다 보니 필드 값이 많아 질 때, 대충 맞겠지 하면서 값을 입력했더니, 개발하다 보니 Builder를 통해 인스턴스 생성시, 나중에 null이 들어가는 부분이 계속 생겨났다. 그냥 내 실수려니 하고 넘어가다가 반복되니, 이건 코드의 문제다 싶어서, 객체 초기화 할 때, 간단하게 필수 값을 검증해야겠다! 라는 생각부터 시작되게 되었다. 이런 식의 코드처럼.. title을 빼먹는다거나… 👍해결방법 1. 직접 Null 체크 가장 직접적인 방법은 Null체크 하는 메서드를 실제로 만들어서 체크하는 방법이다. class Post { private final String title; private final String conten..
[Spring] 롬복을 사용한 Builder 패턴 Null체크 하며 사용하기😒개요 기존 코드가 롬복의 @Builder를 사용하여 빌더 패턴을 구현했는데, 사용하다 보니 필드 값이 많아 질 때, 대충 맞겠지 하면서 값을 입력했더니, 개발하다 보니 Builder를 통해 인스턴스 생성시, 나중에 null이 들어가는 부분이 계속 생겨났다. 그냥 내 실수려니 하고 넘어가다가 반복되니, 이건 코드의 문제다 싶어서, 객체 초기화 할 때, 간단하게 필수 값을 검증해야겠다! 라는 생각부터 시작되게 되었다. 이런 식의 코드처럼.. title을 빼먹는다거나… 👍해결방법 1. 직접 Null 체크 가장 직접적인 방법은 Null체크 하는 메서드를 실제로 만들어서 체크하는 방법이다. class Post { private final String title; private final String conten..
2023.11.10 -
😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 다음과 같이 변경하게되면 기존에 적었던 메서드들이 모두 컴파일에러를 띄울것이다. 연관관계로 참조했던 것들이 객체를 끊어버리게 되니깐 Entity내부에서 구현했던 연관관계 객체들에서 error를 반환한다. Id로 참조하는 공통 로직을 객체를 새로 생성해 하나에 몰아 넣는다. 🎈과연 이렇게 하는 것이 좋은 변경일까? 객체 지향은 여러객체를 ..
우아한 객체지향 [우아한테크세미나] 정리 5😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 다음과 같이 변경하게되면 기존에 적었던 메서드들이 모두 컴파일에러를 띄울것이다. 연관관계로 참조했던 것들이 객체를 끊어버리게 되니깐 Entity내부에서 구현했던 연관관계 객체들에서 error를 반환한다. Id로 참조하는 공통 로직을 객체를 새로 생성해 하나에 몰아 넣는다. 🎈과연 이렇게 하는 것이 좋은 변경일까? 객체 지향은 여러객체를 ..
2023.11.08 -
😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈설계 개선하기 설계를 진화시키기 위한 출발점 코드 작성 후 의존성 관점에서 설계 검토 → shop과 order에서 사이클이 발생한다. 🎈해결 1. 중간 객체를 이용한 의존성 사이클 끊기 어떻게 보면 DIP의 변형이라 볼 수 있다. 의존성을 끊고 장바구니에서도 OptionGroup과 Option을 활용할 수 있으므로 재사용성이 증가한다...
우아한 객체지향 [우아한테크세미나] 정리 4😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈설계 개선하기 설계를 진화시키기 위한 출발점 코드 작성 후 의존성 관점에서 설계 검토 → shop과 order에서 사이클이 발생한다. 🎈해결 1. 중간 객체를 이용한 의존성 사이클 끊기 어떻게 보면 DIP의 변형이라 볼 수 있다. 의존성을 끊고 장바구니에서도 OptionGroup과 Option을 활용할 수 있으므로 재사용성이 증가한다...
2023.11.08 -
😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈관계의 종류 결정하기 연관관계 → 영구적인 탐색구조가 필요하다면 연관관계로 잡는다. 위와 같은관계에서 만약 Order랑 Shop이랑 굉장히 빈번하게 호출이 발생한다면 연관관계로 잡는것이 좋다. 의존관계 → 협력을 위해 일시적으로 필요한 의존성(파라미터, 리턴타입, 지역변수) → 연관관계는 탐색 가능성을 말하며 두 객체사이에 협력이 필요..
우아한 객체지향 [우아한테크세미나] 정리 3😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈관계의 종류 결정하기 연관관계 → 영구적인 탐색구조가 필요하다면 연관관계로 잡는다. 위와 같은관계에서 만약 Order랑 Shop이랑 굉장히 빈번하게 호출이 발생한다면 연관관계로 잡는것이 좋다. 의존관계 → 협력을 위해 일시적으로 필요한 의존성(파라미터, 리턴타입, 지역변수) → 연관관계는 탐색 가능성을 말하며 두 객체사이에 협력이 필요..
2023.11.07 -
😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈예제(배달 앱) 🎈문제점 사용자가 메뉴를 고름 → 장바구니에 담음 → 이 때 업소에서 해당 메뉴를 변경시킨다. 이 때,가게의 메뉴와 장바구니에 담긴 내용이 다르므로 Validation Check가 필요하다. 🎈Valication 체크 위와 같은 관계에는 방향성이 필요하다. 방향이 잡히면 이는 곧 의존성의 방향이된다. 참고영상
우아한 객체지향 [우아한테크세미나] 정리 2😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈예제(배달 앱) 🎈문제점 사용자가 메뉴를 고름 → 장바구니에 담음 → 이 때 업소에서 해당 메뉴를 변경시킨다. 이 때,가게의 메뉴와 장바구니에 담긴 내용이 다르므로 Validation Check가 필요하다. 🎈Valication 체크 위와 같은 관계에는 방향성이 필요하다. 방향이 잡히면 이는 곧 의존성의 방향이된다. 참고영상
2023.11.07 -
😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈의존성을 이용해 설계 진화시키기 설계 → 코드를 어떻게 배치할 것인가? → 핵심은 변경에 초점을 맞춘다. 같이변경되는 코드를 같이 넣고 변경되지 않는코드를 따로 넣어야 한다. 의존성 의존성이 있다라는 것은 위의 그림에서 B가 변경될 때 A도 함께 변경될 가능성이 있는 것을 말한다. 하지만 꼭 영향을 주는 것이 아니라 가능성이 있는 것을..
우아한 객체지향 [우아한테크세미나] 정리 1😊개요 한창 프로젝트를 하며 스프링과 객체지향을 접하고 활용 했을 때, 의존성에 관한 고민을 매우 많이 했었다. 그러던 도중 유튜브에서 우아한 객체지향 by 조영호님의 세미나를 듣고, 그동안 프로젝트를 진행하면서 이게맞나? 라고 생각했던 실타래들이 하나하나 풀리게 되면서 입을 벌린 상태로 보며 정리했었던 적이 있다. 그때의 내용을 곱씹으면서 다시 정리 해보자고 생각했다. 🎈의존성을 이용해 설계 진화시키기 설계 → 코드를 어떻게 배치할 것인가? → 핵심은 변경에 초점을 맞춘다. 같이변경되는 코드를 같이 넣고 변경되지 않는코드를 따로 넣어야 한다. 의존성 의존성이 있다라는 것은 위의 그림에서 B가 변경될 때 A도 함께 변경될 가능성이 있는 것을 말한다. 하지만 꼭 영향을 주는 것이 아니라 가능성이 있는 것을..
2023.11.07 -
현재 웹 프로젝트 진행중인데 refreshToken을 저장할 때 Redis를 사용한다. 중요한 데이터가 아닌 것과, expireDate를 설정할 수있기에 Redis를 사용했지만 다양한 경우에도 Redis를 사용한다는 것을 알게 되었다. 기존 Redis에 대해 알고있던 정보는 in-memory라 빠르다. 캐시로 많이 사용한다. 싱글 쓰레드이다. 정도 알고 있지만, 그래서 어떤 경우에 쓸 수 있는지, 어떻게 쓰는건지에 대해서는 잘 몰랐기에 한 번 조사해보았다. Redis란? redis는 in-memory key-value storage로 주로 DB 레이어의 부하 분산과 빠른 응답을 위한 캐싱 레이어로 쓰인다.\ 특징 디스크가 아닌 메모리 기반의 data저장소 → 휘발성 (서버를 재시작하면 데이터가 날아감) ..
Redis? 언제 쓰는건데?현재 웹 프로젝트 진행중인데 refreshToken을 저장할 때 Redis를 사용한다. 중요한 데이터가 아닌 것과, expireDate를 설정할 수있기에 Redis를 사용했지만 다양한 경우에도 Redis를 사용한다는 것을 알게 되었다. 기존 Redis에 대해 알고있던 정보는 in-memory라 빠르다. 캐시로 많이 사용한다. 싱글 쓰레드이다. 정도 알고 있지만, 그래서 어떤 경우에 쓸 수 있는지, 어떻게 쓰는건지에 대해서는 잘 몰랐기에 한 번 조사해보았다. Redis란? redis는 in-memory key-value storage로 주로 DB 레이어의 부하 분산과 빠른 응답을 위한 캐싱 레이어로 쓰인다.\ 특징 디스크가 아닌 메모리 기반의 data저장소 → 휘발성 (서버를 재시작하면 데이터가 날아감) ..
2023.10.23 -
🔗링크 2668 숫자고르기 Gold5 ⚠️문제 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 찾는 프로그램을 작성하시오. 예를 들어, N=7인 경우 아래와 같이 표가 주어졌다고 하자. 이 경우에는 첫째 줄에서 1, 3, 5를 뽑는 것이 답이다. 첫째 줄의 1, 3, 5밑에는 각각 3, 1, 5가 있으며 두 집합은 일치한다. 이때 집합의 크기는 3이다. 만약 ..
백준 2668 숫자고르기[JAVA]🔗링크 2668 숫자고르기 Gold5 ⚠️문제 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 찾는 프로그램을 작성하시오. 예를 들어, N=7인 경우 아래와 같이 표가 주어졌다고 하자. 이 경우에는 첫째 줄에서 1, 3, 5를 뽑는 것이 답이다. 첫째 줄의 1, 3, 5밑에는 각각 3, 1, 5가 있으며 두 집합은 일치한다. 이때 집합의 크기는 3이다. 만약 ..
2023.09.26 -
평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 🕸️ internet 📌 301과 302 상태 코드의 의미와 차이는 무엇인가요? 더보기 301과 302는 Redirection 동작을 의미한다. 웹페이지를 새로운 도메인으로 옮겼을 경우 이용자들을 변경된 주소로 자동으로 옮겨가게 만드는데 사용한다. HTTP프로토콜에서 해당 상태..
👶주니어 자바 개발자를 위한 100가지 질문 - Internet, Spring평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 🕸️ internet 📌 301과 302 상태 코드의 의미와 차이는 무엇인가요? 더보기 301과 302는 Redirection 동작을 의미한다. 웹페이지를 새로운 도메인으로 옮겼을 경우 이용자들을 변경된 주소로 자동으로 옮겨가게 만드는데 사용한다. HTTP프로토콜에서 해당 상태..
2023.09.25 -
평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 🕸️Java Web 📌 jsp와 servlet의 차이점은 무엇인가요? 더보기 JavaServerPage JSP는 HTML 내부에 자바 코드를 잡입하는 형식으로 서블릿을 활용하여 웹 프로그래밍을 할 수 있지만, 화면 인터페이스 구현에 너무 많은 코드가 필요하므로 서블릿을 작성하지..
👶주니어 자바 개발자를 위한 100가지 질문 - java Web, 예외클래스평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 🕸️Java Web 📌 jsp와 servlet의 차이점은 무엇인가요? 더보기 JavaServerPage JSP는 HTML 내부에 자바 코드를 잡입하는 형식으로 서블릿을 활용하여 웹 프로그래밍을 할 수 있지만, 화면 인터페이스 구현에 너무 많은 코드가 필요하므로 서블릿을 작성하지..
2023.09.11 -
주니어 자바 개발자를 위한 100가지 질문 평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 🪢reflection 📌 reflection이란 무엇인가요? 더보기 Reflection이란? 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 말하며, 컴파일..
👶주니어 자바 개발자를 위한 100가지 질문 - Reflection, Object Copy주니어 자바 개발자를 위한 100가지 질문 평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 🪢reflection 📌 reflection이란 무엇인가요? 더보기 Reflection이란? 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 말하며, 컴파일..
2023.09.04 -
평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 📦Container 📌 자바 컨테이너란 무엇인가요? 더보기 자바 컨테이너란, 객체들을 저장하기 위한 저장소(객체)이다. 배열은, 원시타입의 배열을 쓸 때, 크기를 미리 선언하는데, 이는 한 번 정해지면 바꿀 수 없으므로 이에 따른 제약이 생긴다. 자바 컨테이너는 이를 해결할 수..
👶주니어 자바 개발자를 위한 100가지 질문-Container, Multi-Threading평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다. 처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영! 📦Container 📌 자바 컨테이너란 무엇인가요? 더보기 자바 컨테이너란, 객체들을 저장하기 위한 저장소(객체)이다. 배열은, 원시타입의 배열을 쓸 때, 크기를 미리 선언하는데, 이는 한 번 정해지면 바꿀 수 없으므로 이에 따른 제약이 생긴다. 자바 컨테이너는 이를 해결할 수..
2023.08.30 -
🥴Paging? 글 목록이나 유저 목록 등을 구현하다 보면 페이징이 필요한 경우가 있다. 페이지를 나눠 해당 페이지에 필요한 정보만 보내기도 하고, 정렬 기준이 필요한 경우도 있을 것이다. 스프링에서는 간편하게도 해당 기능을 구현한 Page, Pageable이 존재한다. 현재 프로젝트 구현 중에 페이지 처리를 해야 하는 부분이 생겨서 해당 기능을 간략하게 정리해 보려고 한다. 🛰️Controller 먼저 컨트롤러에서의 Paging처리이다. 보통 요청은 다음과 같이 Pageable의 page, size, sort 3가지의 파라미터로 요청받는다. /api/admin/users?page=3&size=1&sort=id,DESC → 3번째 페이지 / 페이지당 사이즈 1 / id기준 내림차순 정렬 @GetMappi..
스프링부트 페이징처리하기(JPA + RESTAPI)🥴Paging? 글 목록이나 유저 목록 등을 구현하다 보면 페이징이 필요한 경우가 있다. 페이지를 나눠 해당 페이지에 필요한 정보만 보내기도 하고, 정렬 기준이 필요한 경우도 있을 것이다. 스프링에서는 간편하게도 해당 기능을 구현한 Page, Pageable이 존재한다. 현재 프로젝트 구현 중에 페이지 처리를 해야 하는 부분이 생겨서 해당 기능을 간략하게 정리해 보려고 한다. 🛰️Controller 먼저 컨트롤러에서의 Paging처리이다. 보통 요청은 다음과 같이 Pageable의 page, size, sort 3가지의 파라미터로 요청받는다. /api/admin/users?page=3&size=1&sort=id,DESC → 3번째 페이지 / 페이지당 사이즈 1 / id기준 내림차순 정렬 @GetMappi..
2023.08.04