
Git (코드 변경점 기록)버전관리를 위해 만들어짐에러 발생시 과거로 돌아가기 좋음 | 코드 변경점을 기록버전 관리 도구 (형상 관리 도구) : 소프트웨어의 변경사항을 체계적으로 추적하고 통제함Github (온라인 백업)백업을 하고 공유가 가능해져서 협업이 가능하다필수

서버 → 클라이언트 : JSON 형식으로 데이터를 보내줌JSON 형식 : key와 value로 구성되어있음클라이언트 → 서버 : GET 방식을 사용해서 데이터를 가져옴fetch는 웹 개발에서 네트워크 리소스를 가져오기 위한 API이다주로 HTTP 요청을 보내고 응답을

강의에서는 DBeaver를 사용했지만 mysql을 사용하는 것으로 보이기 때문에 mysql workbench를사용하도록 하겠음DBeaver와 다르게 처음 시작할 때 use 테이블명 을 입력해야함SQL문도 사용하던 함수만 사용해서 잊어버린 함수도 있었는데 다시한번 정리하

if문 IF 함수는 다음과 같이 사용됩니다.예를 들어, "salary" 컬럼이 50000보다 크면 "High", 그렇지 않으면 "Low"를 반환하고 싶다면 다음과 같이 사용할 수 있습니다.이 경우, IF 함수는 조건에 따라 "High" 또는 "Low"를 반환하며, 새로

Java는 Write Once Use Anywhere 이라는 목적을 가지고 있습니다!번역하자면, "소스파일을 하나만 작성하면 어디에서든지 사용이 가능하다!" 입니다.자바의 호환성과 관련된 내용과거 AWS 호스팅 과정에서 윈도우 환경에서 제작한 프로젝트 코드를 깃허브를

Keep : 일어났던 좋은 일들과 우리의 프로세스/문화의 일부로 간직하고 싶은 것.Problem : 현재 스프린트에서 직면한 과제와 개선해야 할 점.Try : 다음 스프린트에서 더 원활한 코스를 얻기 위해 이전 문제를 제거하거나 개선하기 위한 시정 조치입니다.우선 팀
18 : IN() : IN()은 SQL에서 사용되는 조건 연산자 중 하나로, 특정 값이 리스트나 서브쿼리에 속하는지를 검사하는 데 사용됩니다.예를 들어, 다음은 IN() 연산자를 사용하여 특정 도시에 속하는 고객을 선택하는 쿼리입니다:이 쿼리는 "고객" 테이블에서 도시

기초적인 계산기를 만들고 객체지향에 맞도록 변경해가는 과정을 느낄 수 있었다.생각보다 클래스 다이어그램을 보고 구현하는 것이 쉽지 않았다.기능구현에는 문제가 없었지만 그 이후 객체지향 코드로 변경하는 점을 다시 해봐야겠다.패턴 클래스를 사용해 보지 않아서 힘들었다 (공

GUI를 통한 키오스크가 아닌 CMD에 텍스트를 이용한 키오스크이다기능구현에는 어려움이 없었다.다만 main클래스 하나 만들어두고 모든 코드를 좔좔 작성하는 것이 아닌 객체지향방식을 적용하려 노력하였다. 사용한 방식은 MVC 모델을 사용하였다. 생각보다 정리가 된다는

피드백 : 신휘웅 튜터님필수 요구사항에 대한 기능구현을 마치고 나름 MVC 모델을 적용한 개발을 했다고 생각하여 튜터님에게 검토를 받았다MVC 모델을 사용\-> 좋았다.Menu 모델클래스의 존재 이유를 모르겠어서 현업에서는 모델 제작 기준이 어떻게 됩니까?\-> 모델

스스로 MVC 모델을 잘 만들었다고 생각하였지만 결국은 겉모습만 MVC였고 MVC의 특징을 지키지 않았다는 것을 알게 되었다.스스로 만든 구조 \- 모델을 의존하는 컨트롤러와 컨트롤러를 의존하는 뷰정상적인 MVC 구조 \- 모델과 뷰에 의존하는 컨트롤러이지만 모델과

controller에 역할에 대한 이야기와 세부적인 분배를 위한 Service 필요controller에서 Service내용에 대한 것을 분리하는 데 성공 \- 다만 controller에서 Service에 getter를 이용해서 데이터를 가져오는데 객체지향적으로 맞는지

더 나아갈 내용이 있더라도 설계, 객체지향 등 여러가지 자바 이외의 이론적인 내용을 더 배워야 가능하다는 생각이 들어 오늘 MagicNumber와 예외처리를 추가하고 정리하였다.세부적으로 기록하며 듣기보다 가볍게 한번 귀에 익숙해지도록 듣기 시작브랜치 활용하기생성bit

이 책은 나와 매우 잘 맞을 것 같다는 느낌을 처음부터 주었다 \- 자바를 한권정도 공부하였으며, 스프링을 본격적으로 입문하려는 사람처음에는 자바의 탄생과 역사에 관해서 이야기가 나오고 chapter 1이 해당하는 내용이다.우선 읽으면서 졸리지 않은 전문서적이 매우

수강생 관리 프로그램팀원들과 함께 기능 정의서를 만들었고, 같이 클래스 설계를 하고 역할 분담을 진행하였다. \- 생각보다 오래 걸린듯 짧았던것 같기도 하다 하루 동안 생각보다 많은 것을 하였다. 깃허브 조직 생성 \- 각각 맡은 역할의 내용이 많이 않아 각자의
수강생 관리 프로그램 \- 생각보다 역할을 나눠서 하니 코드 충돌도 심각한 문제가 나타나지 않아서 다행이다.주어진 기간보다 일찍 끝나고 할 수 있는 리팩토링도 보이지만 크지 않아서 좋았다.3장 \- 잘못 알고있는 객체지향에 대한 인식을 고쳐준다고 해서 기대하고있는
3장 자바와 객체지향우리가 흔히 생각하는 자바 객체지향의 예시에는 붕어빵틀 붕어빵 = new 붕어빵틀;해당 내용이 왜 틀렸는지를 정확하게 설명해 주었다.우리는 객체지향에서의 상속을 부모와 자식의 개념으로 많이 배웠다고 생각한다.당연히 상속받은 자식 클래스는 부모 클래스

Editor > GeneralChange font size with Command + Mouse Wheel in:Editor > General > Auto Import Add unambiguous imports on the flyOptimize imports on th

DTODTO(Data Transfer Object)는 데이터 전송 및 이동을 위해 생성되는 객체를 의미합니다.그리고 DB와의 소통을 담당하는 Java 클래스를 그대로 Client에 반환하는 것이 아니라 DTO로 한번 변환한 후 반환할 때도 사용됩니다 ex) Reques

컨트롤러(Controller)역할: 클라이언트로부터의 HTTP 요청을 받아 해당 요청에 대한 비즈니스 로직을 실행하고, 그 결과를 클라이언트에 응답으로 반환하는 역할을 수행합니다.설명: 컨트롤러는 웹 애플리케이션의 진입점이며, 사용자와 상호작용하는 인터페이스 역할을 합

자바 ORM(Object-Relational Mapping) 기술에 대한 표준 명세객체 즉, 자바의 클래스와 DB의 데이터를 직접 매핑 하려면 앞서 살펴본 것 처럼 매우 번거롭고 많은 작업들이 필요했지만 ORM을 사용하면 이를 자동으로 처리해줍니다.이 ORM 중 JPA
Github link : https://github.com/SerenityZenDev/CalenderAppServer API 명세서https://www.notion.so/ee9eb47c03f34c7bb21c40b21dae367c?v=7cc233e98

@Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록 해주며 해당 방법으로 Bean을 등록시키는게 좋다.그렇다면 Bean 수동 등록은 언제 하면 좋은가? \- 기술적인 문제나 공통적인 관심사를 처리할 때 사

Filter란 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있습니다.로깅 및 보안 처리에 활용합니다. \- 인증, 인가와 관련된 로

서비스 개발을 진행하다보면 라이브러리 사용만으로는 구현이 힘든 기능들이 무수히 많이 존재 \- 우리의 서비스에서 회원가입을 진행할 때 사용자의 주소를 받아야 한다면 주소를 검색할 수 있는 기능을 구현해야하는데 직접 구현을 하게되면 많은 시간과 비용카카오에서 만든 주소

@ManyToOne : N 대 1 관계를 맺어주는 역할단방향 관계 /- 음식/- 고객양방향 관계 \- 음식 Entity가 N의 관계로 외래 키의 주인 /- 음식 /- 고객@OneToMany : 1 대 N 관계를 맺어주는 역할단방향 관계 \- 1 : N에서 N

JPA는 연관관계가 설정된 Entity의 정보를 바로 가져올지, 필요할 때 가져올지 정할 수 있습니다. \- 즉, 가져오는 방법을 정하게되는데 JPA에서는 Fetch Type이라 부릅니다. \- Fetch Type의 종류에는 2가지가 있는데 하나는 LAZY , 다른

스프링 Security를 사용하면 Filter에서 @Component와 @Order로 인한 적용이 불가하다.SecurityConfig에서 http.addFilterBefore를 통해 주입하여 해결필터와 리소스 접근과는 아무 관련이 없음위 코드에서 ("/user/\*\*

필터와 Security의 관계여기 나타난 "/user/\*\*"에 해당한다고 해서 하단에 추가한 필터에서 인증/인가를 시행하지 않는 것이 아니다. 따라서 예외처리를 어떻게 해야하나 고민을 많이 한 결과...if (StringUtils.hasText(tokenValue)

json 리턴 \- @RestController는 리턴값을 자동으로 json으로 변환해주고 있다.그렇다면 json을 반환하는 여러가지 방법을 알아보자여기서는 각종 데이터를 가지고 있는 dto를 List<>로 직접 묶어 전송하고있다.결과물여기서는 직접 List&l

기존 JWT 토큰 흐름 \-(정상) API 호출 -> 액세스 토큰이 유효한가?(True) -> 정상 호출 -> 응답 반환 \-(오류) API 호출 -> 액세스 토큰이 유효한가?(False) -> 예외 호출 RefreshToken 흐름 \-(정상, 정상) API

같이 공부하는 팀원분이 순환참조 오류에 빠지셨다.User 와 Schedule은 이미 양방향 참조를 Entity에서 이루고 있다.해당 dto에서 생성자를 사용할 때 사용한 stream 문법 부분에서 순환참조가 발생한다. (이미 user는 todo를 참조하고 있고 todo

진행사항프로젝트 아이디어 구상주제 : Code Source Community대상 : 내일배움캠프 자바스프링 수강생설명 : 내일배움캠프 강의와 과제를 진행하며 만난 에러를 모두가 공유하며 서로를 도와 문제를 해결하고 계속해서 진행되는 내일배움캠프 수강생이 도움을 받을 수

진행사항역할분담에서 배분 파트 구현팀원 J : Member 파트 구현 (완) - 기타 토큰이나 패스워드 암호화 진행 중팀원 C : Board 파트 구현 중개인 구현 내용나머지 Comment, ReComment를 구현 (완)RDS 구축 및 팀원에게 권한 부여 - 하나의

역할분담에서 배분 파트 구현팀원 J : Member 파트 구현 (완) - 기타 토큰이나 패스워드 암호화(완) - 이메일 인증(완)팀원 C : Board 파트 구현 중개인 구현 내용나머지 Comment, ReComment를 구현 (완)RDS 구축 및 팀원에게 권한 부여

역할분담에서 배분 파트 구현팀원 J : Member 파트 구현 (완) - 기타 토큰이나 패스워드 암호화(완) - 이메일 인증(완)팀원 C : Board 파트 구현 (완)개인 구현 내용나머지 Comment, ReComment를 구현 (완)RDS 구축 및 팀원에게 권한 부

최종 정리필수 구현 기능 및 각 기능별 아쉬운 점 사용자 인증 기능RefreshToken + AccessToken 까지 구현 했으면 좋았을 것 같다.로그아웃 부분을 백엔드에서 구현할 방법을 강구했으면 좋을 것 같다. 프로필 관리AWS S3를 이용한 이미지 기능을 추가했

OAuth를 이용한 카카오 로그인을 위해서는 카카오 개발자 센터에서 카카오계정(이메일) 설정을 해야한다. 이미지 출처와 같은 곳 문서에서 확인할 수 있다.카카오 로그인 버튼을 누르면 해당 페이지로 이동해당 카카오 로그인 페이지에서 '동의하고 계속하기'를 클릭하면 설정한

단위 테스트는 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법단위 테스트는 빠르게 작성이 가능하며, 문제 발생 시 어느 부분이 잘 못 되었는지를 빠르고 정확하게 확인할 수 있다는 장점이 있다.각각의 테스트 코드가 실행되기 전에 수행되는 메서드를

Given-When-Then 패턴은 Test Code 스타일을 표현하는 방식을 뜻합니다. \- Given : 테스트 하고자하는 대상을 실제로 실행하기 전에 테스트에 필요한 값(상태)을 미리 선언 \- When : 테스트 하고자하는 대상을 실제로 실행 시킵니다. \-

단위 테스트 (Unit Test)하나의 모듈이나 클래스에 대해 세밀한 부분까지 테스트가 가능합니다.하지만 모듈 간에 상호 작용 검증은 할 수 없습니다.통합 테스트 (Integration Test)두 개 이상의 모듈이 연결된 상태를 테스트할 수 있습니다.모듈 간의 연결에

🆕 DTO, Entity Test 추가하기@Test 를 사용해서 DTO 와 Entity Test 를 추가합니다.User, Todo, Comment, DTO 에 존재하는 메서드들에 대해서 테스트를 추가합니다.△ 🆕 Controller Test 추가하기@WebMvc

사용자 인증 기능회원가입 기능 로그인 및 로그아웃 기능 프로필 관리프로필 수정 기능비밀번호 수정 시에는 비밀번호를 한 번 더 입력받는 과정이 필요합니다.최근 3번안에 사용한 비밀번호는 사용할 수 없도록 제한합니다. 주문 CRUD 기능배달앱일 경우 : 주문 작성,

해당 코드는 Service부분의 코드로 장바구니에 메뉴를 담는 로직이다.하지만 하나의 메소드가 너무 여러가지의 기능을 담고 있다는 지적을 받았다. \- 1. 메뉴 검증 로직 \- 2. 동일한 메뉴와 동일한 사용자가 존재하는 지 확인 로직 \- 3. 장바구니

DB 탄생 후 Java 앱과 연동을 위해 JDBC 이 탄생했다.그렇다면 왜 탄생 배경을 알아야 할까 \- 내가 입사할 회사에 JPA 가 적용안된 프로젝트가 있을 수 있다! (대기업 및 금융) \- DB가 탄생한 후 수십년 후에야 ORM 이 나왔고 그뒤로 수년 후에야

Service 클래스를 인터페이스와 구현체 형태로 변경Service 클래스 내 메소드마다의 책임을 1개에 가깝게 줄이기수정 전 Service수정 후 클래스장점유연성과 확장성 향상: 인터페이스를 통해 서비스의 계약을 정의하면, 다양한 구현체를 쉽게 교체하거나 추가할 수

객체 관점에서의 이름디폴트로 클래스명으로 설정됨엔티티의 이름은 JQL에서 쓰임JQL : Entity 명으로 쿼리짤때 쓰이는 언어 (ex. JPQL, QueryDsl)RDB 의 테이블 이름@Entity의 이름이 테이블의 기본값.주로 Entity 이름과 다르게 Table

Repository ~ JpaRepository 까지는 \*\*@NotRepositoryBean\*\* 이 붙어있는 인터페이스이다.JpaRepository<Entity,ID> 붙이면 알맞은 프로그래밍 된 \*\*SimpleJpaReository\*\* 구현체 빈이

JpaRepository 의존성 \- ListPagingAndSortingRepository \- PagingAndSortingRepository : 여기에서 페이징 & 소팅 기능을 제공합니다.PageRequest 를 사용하여 Pageable에 페이징

정의데이터 접근을 간편하게 만들어주는 프레임워크이며 개발자가 다양한 저장소에 일관된 접근 패턴을 사용하도록 도와준다.기능SprintData Common 의 CRUDRepository + PagingAndSortingRepository 이 쿼리기능을 제공CRUDRepos

순서./gradlew clean build : 새로운 jar 파일 생성docker build -t {이미지이름}:{버전} . : docker 이미지 생성docker tag {이미지이름}:{버전} {도커이름}/{이미지이름}:{버전} : docker hub에 올릴 수 있도

Spring Data JPA를 사용하면, 엔티티가 생성되거나 수정될 때 그 순간을 자동으로 기록할 수 있는 매우 유용한 기능인 Auditing을 활용할 수 있습니다. Auditing 기능을 사용하면, 방명록에 방문자가 자신이 방문한 날짜와 시간을 남기는 것처럼, 엔티티

HATEOAS(Hypermedia As The Engine of Application State)는 RESTful API 설계 원칙 중 하나로, 클라이언트가 서버와 상호작용하는 방식에 있어서 하이퍼미디어(주로 하이퍼링크)를 통해 애플리케이션의 상태를 관리하고, 다음 가

쿼리 문자열과 Entity 를 직접 넣어서 쿼리를 작성한다.setParameter 와 같이 key, value 문자열을 통해서 쿼리 파라미터를 매핑할 수 있다.@Query 의 인자값으로 간단하게 쿼리를 작성할 수 있습니다.쿼리를 작성할때는 테이블명이 아니라 Entity

Spring Data JPA를 사용하여 엔티티의 Insert와 Update 작업을 보다 효율적으로 처리할 수 있도록 도와주는 @DynamicInsert와 @DynamicUpdate 어노테이션에 대해 알아보겠습니다. 이 어노테이션들은 엔티티에 적용되며, null이 아닌

데이터베이스에서 락은 동시성 제어를 위해 사용됩니다. 동시에 여러 트랜잭션이 하나의 데이터에 접근할 때, 데이터의 일관성과 무결성을 유지하기 위해 도입된 메커니즘입니다. 락을 통해 특정 데이터나 자원에 대한 접근을 제어하고, 동시에 발생할 수 있는 충돌을 방지합니다.데

프로젝트 호스팅 방법으로 Docker를 이용한 EC2 호스팅을 선택프로젝트 내용 상 2가지 이미지를 필요로 함(Springboot, Redis)로컬환경에서는 로컬 Springboot와 Docker Redis를 이용한 테스트 성공다만 Springboot를 Docker 이

진행내용주제 선정 : 이커머스(쇼핑몰)와이어프레임 설계 및 ERD구축기존 설계 검토리뷰 제거(물론 있으면 좋지만 개발 기간과 사용할 기술을 생각하여 제거)장바구니 제거(백엔드에서 제거 / 프론트에서 로컬 스토리지를 활용하기로 함)비로그인의 경우에도 어디까지 기능을 사용

Q. NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.RDBMS의 장점 : 데이터 일관성과 안정성이 뛰어나며, ACID(Atomicity, Consistency, Isolation, Durability) 특성을 제공하여 데이터의 무결성을

Q1. mvc 패턴에 대해서 설명해주세요.mvc 패턴은 model - view - controller로 이루어져있습니다.model은 데이터의 관리 및 비즈니스 로직을 담당합니다.view는 사용자 인터페이스를 제공하고 입출력을 담당합니다.controller는 model과

Q1. Primary Key, Foreign Key에 대해 설명해주세요.Primary Key (기본 키): 테이블에서 각 행을 고유하게 식별하는 열이나 열의 집합입니다. 주로 이 열에는 NULL 값을 허용하지 않고, 중복된 값을 포함하지 않는 유일한 값이 할당됩니다.F

Q1. CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.SOP(Same-Origin Policy, 동일 출처 정책)는 브라우저에서 실행되는 웹 페이지가 다른 출처로부터 불러온 리소스에 제한을 둠으로써 보안을 강화하는 메커니즘입니다.

Q1. 쿠키, 세션의 개념과 차이를 설명해보세요쿠키(Cookie)쿠키는 클라이언트 측에 저장되는 작은 데이터 조각입니다.주로 브라우저에 저장되어 사용자의 컴퓨터에 보관됩니다.쿠키는 사용자의 상태 정보를 클라이언트에 저장하여 다음 요청 시에 서버에 전달합니다.사용자가 로

Q1. http, https 차이점에 대해 설명해주세요.HTTP, HTTPS 모두 웹 브라우저와 웹 서버 간의 데이터 전송 프로토콜이지만 HTTP는 데이터를 평문으로 보내어 탈취당할 가능성이 높다면 HTTPS는 보안이 적용되어 있습니다.HTTPS의 보안에는 대칭키 암호

ELK란?ELK는 Elasticsearch, Logstash 및 Kibana의 약어입니다. 이들은 데이터 처리와 시각화를 위한 오픈 소스 도구들입니다.ELK 각각의 역할Elasticsearch: 실시간으로 데이터를 저장하고 검색할 수 있는 분산형 검색 및 분석 엔진입니

Q1. ORM을 사용하면서 쿼리가 복잡해지는 경우쿼리 최적화: ORM이 생성하는 쿼리를 분석하고 필요한 경우 최적화를 진행합니다. 불필요한 JOIN이나 서브쿼리를 제거하고, 인덱스를 적절히 활용하는 등의 작업을 수행하여 성능을 향상시킵니다.로우 레벨 쿼리 사용: ORM

Q1. OSI 7계층에 대해 아는대로 설명해주세요.네트워크 통신을 일곱 개의 계층으로 분류하여 설명하는 방식입니다. 각 계층은 특정한 역할과 책임을 담당하여 네트워크 통신을 관리합니다.물리 계층 (Physical Layer): 데이터를 전기적 신호로 변환하여 전송하는

Q1. JWT, Refresh, Access Token에 대해서 설명해주세요.JWT(JSON Web Token)는 정보를 안전하게 전달하기 위한 방법 중 하나로, JSON 형식으로 되어 있어 사용자의 클레임(claim) 정보를 담고 있습니다. 이 클레임은 사용자에 대한

팀 이름 : 10-trillion-dollars팀 인원 : 5명주제 : 이커머스기간 : 24.3.26 ~ 24.4.30중간발표 : 4.15 14:00최종발표 : 4.29 14:00일정 관리3.26(화) ~ 3.28(목) : 각 도메인 별 CRUD 완성3.29(금) ~

ELK는 Elasticsearch, Logstash, Kibana의 약어로, 대규모 데이터의 수집, 저장, 시각화 및 분석을 위한 오픈 소스 플랫폼입니다. 각각의 구성 요소는 다음과 같은 역할을 합니다Elasticsearch: 실시간으로 데이터를 저장하고 검색할 수 있

CI (Continuous Integration)와 CD (Continuous Deployment/Delivery)는 현대 소프트웨어 개발에서 중요한 개념입니다. 이들은 개발자들이 코드를 수정하고 릴리즈하는 과정을 자동화하여 개발 효율성을 높이고 소프트웨어 품질을 향상

프로세스는 실행 중인 프로그램을 의미하며, 운영체제로부터 자원을 할당받아 독립적으로 실행됩니다. 각각의 프로세스는 자신만의 주소 공간, 데이터, 스택 등을 가지고 있습니다. 쓰레드는 프로세스 내에서 실행되는 흐름의 단위로, 프로세스 내의 자원을 공유합니다. 여러 개의

쿼리 최적화는 데이터베이스 성능을 향상시키기 위해 쿼리의 실행 속도를 개선하는 과정입니다. 이를 위해 다양한 방법을 사용할 수 있습니다. 가장 일반적인 방법 중 하나는 쿼리를 분석하고 실행 계획을 확인하여 비효율적인 부분을 파악하는 것입니다. 실행 계획을 확인하여 인덱

테스트 코드(Test Code)는 소프트웨어의 기능이나 모듈이 의도된 대로 작동하는지를 확인하기 위해 작성된 코드입니다. 주로 단위 테스트(Unit Test), 통합 테스트(Integration Test), 시스템 테스트(System Test) 등의 다양한 수준에서 작

AWS S3 (Amazon Simple Storage Service)확장성과 신뢰성: AWS S3는 거의 무제한의 데이터 저장 공간을 제공하며, 이는 필요에 따라 용량을 증가시킬 수 있다는 것을 의미합니다. 또한 데이터는 여러 데이터 센터에 복제되어 있어 신뢰성이 높습
Microservices Architecture (MSA)는 애플리케이션을 여러 개의 작은 독립적인 서비스로 분리하여 개발, 배포, 및 확장을 가능하게 하는 소프트웨어 아키텍처 스타일입니다. 각 서비스는 특정 비즈니스 기능을 수행하며, 독립적으로 배포 및 확장될 수 있
서비스 디스커버리는 분산 시스템에서 서비스 인스턴스의 위치를 동적으로 찾기 위한 메커니즘입니다. 서비스 디스커버리 없이, 각 서비스는 다른 서비스의 위치를 알고 있어야 합니다. 이는 서비스 인스턴스의 수가 증가하거나 변경될 때마다 큰 관리 비용을 발생시킵니다.서비스 디
1.1 로드 밸런싱이란?로드 밸런싱은 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고 시스템의 성능과 가용성을 높이는 기술입니다. 이를 통해 특정 서버에 부하가 집중되는 것을 방지할 수 있습니다. 로드 밸런싱의 종류는 다음과 같습니다:클라이언트 사이드 로드
서킷 브레이커는 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴입니다. 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 합니다. 서킷 브레이커는 주로 세 가지 상태를 가집니다:클로
API 게이트웨이는 클라이언트 요청을 백엔드 서비스로 라우팅하고 다양한 부가 기능을 제공하는 중간 서버입니다.단일 진입점 역할을 하며 보안, 로깅, 모니터링, 요청 필터링 등을 처리합니다.라우팅: 클라이언트 요청을 적절한 서비스로 전달인증 및 권한 부여: 요청의 인증
마이크로서비스 아키텍처에서 보안은 핵심 요소입니다. 각 서비스가 독립적으로 배포되고 통신하는 구조에서는 데이터 보호, 인증, 권한 부여, 통신 암호화 등을 통해 시스템의 보안성을 확보해야 합니다.OAuth2는 토큰 기반의 인증 및 권한 부여 프로토콜입니다.클라이언트 애
Spring Cloud Config는 분산 시스템 환경에서 중앙 집중식 구성 관리를 제공하는 프레임워크입니다. 이를 통해 애플리케이션의 설정을 중앙에서 관리하고, 변경 사항을 실시간으로 반영할 수 있습니다. Git, 파일 시스템, JDBC 등 다양한 저장소를 지원합니다
분산 추적은 분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법입니다.이 방법을 통해 여러 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있습니다.주요 개념:트레이스(Trace): 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 전
이벤트 드리븐 아키텍처(EDA)는 시스템 내에서 발생하는 이벤트(상태 변화나 사용자 행동)를 중심으로 시스템을 설계하는 소프트웨어 아키텍처 스타일입니다. EDA는 비동기적으로 이벤트를 처리하여 시스템의 응답성을 높이고, 서비스 간의 느슨한 결합을 통해 독립적인 개발과
MSA는 무조건 정답이 아니다: MSA를 도입하려면 정책 설정, 다양한 도구의 활용 등 많은 준비가 필요하다. 빠르게 프로토타입을 만들어야 한다면 모놀리틱 아키텍처를 사용하고, 후에 MSA로 전환하는 것도 좋은 전략이다.핵심 기능 학습: 이번 학습을 통해 MSA를 구성
사용자 수 파악: 시스템 설계의 첫 단계는 예상 사용자 수를 파악하는 것입니다. 특히 동시 접속자 수와 특정 시간대에 발생하는 최대 초당 요청량(TPS)을 중점적으로 고려해야 합니다.TPS의 중요성: 초당 요청량(TPS)은 시스템이 얼마나 많은 트랜잭션을 동시에 처리할
RabbitMQ는 메시지 브로커로, 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중간 매개체 역할을 합니다. RabbitMQ는 이러한 메시지를 큐(queue)에 저장하고, 필요할 때 적절한 수신자에게 전달하는 기능을 수행합니다.비동기 처리: R
Kafka는 실시간 데이터 피드를 처리하기 위해 설계된 분산 스트리밍 플랫폼입니다. 원래 LinkedIn에서 개발되어 Apache Software Foundation에 오픈 소스로 기여된 Kafka는 실시간 데이터 파이프라인 구축과 스트리밍 애플리케이션에 널리 사용됩니
PostgreSQL과 MySQL은 둘 다 널리 사용되는 관계형 데이터베이스 관리 시스템(RDBMS)이지만, 몇 가지 중요한 차이점이 있다.ACID 준수:PostgreSQL은 완전한 ACID(Atomicity, Consistency, Isolation, Durabilit

오늘은 GitHub를 활용한 팀 프로젝트에서 얻은 경험을 정리해보려 합니다. GitHub 이슈와 PR(풀 리퀘스트) 관리, 그리고 Projects 기능을 활용한 칸반보드 사용 방법에 대해 깊이 배우고 실습할 기회가 있었습니다.GitHub 이슈는 프로젝트 관리에서 중요한
오늘은 Spring Boot 애플리케이션에서 리뷰 서비스 기능 구현 중 발생한 캐시 삭제 문제와 예외 처리의 안전성 부족에 대해 해결한 경험을 정리해보려 합니다.Spring Boot 애플리케이션에서 리뷰 서비스를 구현하는 과정에서, 캐시 삭제와 관련된 문제가 발생했습니
이번 주 비동기 처리에 대해 고민하게 된 이유는 MSA 환경에서의 결제 처리 방법을 고려하면서 시작되었습니다. MSA 구조에서는 여러 서비스가 분리되어 운영되며, 각 서비스 간 통신을 어떻게 처리할지에 대한 선택이 중요합니다. 특히, 결제와 같은 중요한 비즈니스 로직에
결제 프로세스에서 외부 결제 API 호출을 별도의 메소드로 분리하고, 그 과정에서 트랜잭션 분리에 대해 고민했습니다. 기본적으로 결제 정보를 생성하는 트랜잭션과 외부 결제를 수행하는 트랜잭션을 분리하여, 외부 결제 API 실패 시에도 결제 정보는 남기되, 결제 상태만
티켓과 결제를 분리하는 프로젝트의 의사결정을 도입 이유, 문제 상황, 해결 방안, 의견 조율, 최종 의사 결정으로 정리하면 다음과 같습니다.성능 최적화: 실시간으로 많은 사용자가 몰리는 티켓팅 시스템에서 좌석 예약과 결제를 분리함으로써 응답 속도를 높이고, 사용자가 좌