일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백트래킹
- aws
- 클라우드
- 로드밸런서
- 스프링부트
- 코드업
- Apache Kafka
- 머신러닝
- VPC
- 오일러프로젝트
- JPA
- gcp
- Elasticsearch
- springboot
- Spring
- 자료구조
- Spring Boot
- 프로그래밍문제
- 월미도
- 스프링
- 스프링 부트
- 카프카
- 알고리즘
- Kafka
- Docker
- 백준
- Spring Data JPA
- 클라우드 컴퓨팅
- 쿠버네티스
- DFS
- Today
- Total
GW LABS
6.2 ORM 객체 관계 매핑: 객체와 RBD 테이블을 자동으로 매핑 장점 ORM을 사용하면서 쿼리를 객체지향적으로 조작할 수 있다. 재사용 및 유지보수가 편리하다. 데이터베이스에 대한 종속성이 줄어든다. 단점 ORM만으로 온전한 서비스를 구현하기에는 한계가 있다. 애플리케이션 객체 관점과 데이터베이스 관계 관점의 불일치가 발생한다. 세분성: ORM의 자동 설계 바업에 따라 데이터베이스에 있는 테이블의 수와 애플리케이션의 엔티티 클래스의 수가 다른 경우가 발생한다. 식별성: RDBMS는 기본키로 동일성을 정의하지만 자바는 두 객체의 값이 같아도 다르다고 판단할 수 있다. 연관성: 객체지향 언어는 객체를 참조함으로서 연관성을 나타내지만 RDBMS에서는 외래키를 삽입함으로써 연관성을 표현한다. 또한 객체지향..
5.2 GET API 리소스 조회 RequestMapping GetMapping PostMapping PutMapping DeleteMapping PathVariable RequestParam @Tag(name = "GetController") @RestController @RequiredArgsConstructor @RequestMapping("/five/v1/") public class GetController { private final FiveService fiveService; @Operation(summary = "pathVariableExample") @GetMapping("/person/{name}") public ResponseEntity pathVariableExample(@Parame..
2.2 스프링 부트의 동작 방식 서블릿: 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술 서블릿 컨테이너: 서블릿 인스턴스를 생성하고 관리 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리 서블릿 객체는 싱글톤 패턴으로 관리 멀티 스레딩을 지원 스프링에서는 DispatcherServlet이 서블릿의 역할 수행 요청 FLOW DispatcherServlet으로 요청(HttpServletRequest)가 들어옴 DispatcherServlet이 핸들러 매핑을 통해 URI에 매핑된 핸들러(Controller)를 탐색 핸들러 어댑터로 컨트롤러 호출 핸들러 어댑터에 컨트롤러 응답이 돌아오면 ModelAndView 응답을 가공해 반환 뷰 형식으로 리턴하는 컨트롤러를 사용할 때에는 뷰..
1.1 스프링 프레임워크 오픈소스 경량급 애플리케이션 프레임워크 핵심가치: “애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것” 1.1.1 제어 역전(IoC) 사용할 객체를 직접 제어하지 않고 객체의 생명주기를 외부(스프링 컨테이너)에 위임 클린코드 11장 시스템에서는 이를 시스템 제작(객체 생성과 의존성 연결)과 시스템 사용(런타임 로직)을 분리하라는 원칙으로 설명하고 있다. 이렇게해서 얻는 이점은 개발자가 관심사를 분리시킬 수 있으므로 비즈니스 로직에 더 집중할 수 있다는 점이다. 1.1.2 의존성 주입(DI) 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식 생성자를 통한 의존성 주입 필드 객체 선언을 통한 의..

처음으로 개인 프로젝트를 출시하게 되었습니다. 백엔드 엔지니어로 일하고 있지만 플러터에 관심이 생겨 공부를 하다가 프로젝트 출시까지 결심했습니다. 디자이너 여자친구와 함께 우리만의 제품을 만든다는 설렘을 느끼면서 개발을 한다는 건 정말로 행복하고 보람찬 일입니다. 약 3개월간의 "카드팡!" 개발기를 독자 여러분과 함께 공유드리고자 합니다. 카드팡! 소개 카드팡!은 플러터로 개발한 메모리 카드게임입니다. 심플한 게임 UI와 아기자기한 카드 디자인을 자랑하고 싶습니다. 현재는 안드로이드 기기에서만 플레이하실 수 있으나, 추후에 IOS로도 출시해볼 예정입니다. 카드 종류에는 색깔 타입, 숫자 타입, 이모지 타입이 있습니다. 레벨이 높아짐에 따라 더 기억하기 어려운 패턴으로 카드가 배치됩니다. 도전욕구가 불타오..
스프링 부트 스프링은 J2EE를 대체하고자 출시되었다. DI 개념을 통해 가벼운 개발 모델을 제공하며, XML 구성 파일을 사용한다. 그러나 복잡한 XML 구성 파일을 사용하는게 부담이 되어 스프링 부트가 출시되었다. 스프링 부트는 스프링 프레임워크와 서드파티 제품으로 구성된 핵심 모듈의 설정 방식을 개선해 상용 스프링 애플리케이션을 빠르게 개발 하기 위한 프레임워크다. 설정보다 관례 패턴을 이용하여 필요한 경우에만 구성을 작성하도록 되어있다. 또한 fat JAR 파일로 알려진 독립형 JAR 파일 기반의 런타임 모델도 지원한다. 스프링 웹플럭스 프로젝트 리액터를 기본 구현으로 논블로킹 HTTP 클라이언트와 서비스의 개발을 지원하는 스프링의 리액티브 애플리케이션이다. 애노테이션 기반 명령형 방식과 함수 지..
마이크로서비스 정의 마이크로서비스는 아래의 두 가지 목표를 달성하고자 일체형 애플리케이션을 작은 컴포넌트로 나누는 것이다. 빠르게 개발해 지속적으로 배포할 수 있어야 한다. 수동 혹은 자동으로 쉽게 스케일링할 수 있어야 한다. 그렇다면 독자적인 작은 컴포넌트는 어떤 조건으로 나누어야 하는 것일까? 각각의 작은 컴포넌트는 독자적인 업그레이드와 스케일링이 가능해야한다. 그렇기위해선 다음과 같은 기준들을 충족해야한다. 아무것도 공유하지 않은 아키텍처를 유지해야 한다. 마이크로서비스는 데이터베이스의 데이터를 공유하지 않는다. 명확한 인터페이스를 통해서만 통신해야 한다. 동기 서비스를 사용하거나 API를 이용한 메시징 방식을 사용할 수 있는데, 이때 사용하는 메시지 형식은 버전 관리 전략에 따라 안정적으로 문서화..
백준 1755번 숫자놀이는 요건에 따라 Map을 정렬하면 쉽게 풀 수 있는 문제였다. C++의 경우 맵을 정렬하는 API가 없기 때문에 Vector 타입으로 변경하여 해결해야 한다. 아래는 풀이 소스이다. 정렬 함수는 C++의 람다 함수를 통해서 구현했다. #include #include #include #include using namespace std; map numberMap = { {0, "zero"}, {1, "one"}, {2, "two"}, {3, "three"}, {4, "four"}, {5, "five"}, {6, "six"}, {7, "seven"}, {8, "eight"}, {9, "nine"} }; int main() { int m, n; cin >> m >> n; map conta..