[BOJ] 10448 - 유레카 이론 (🥉 브론즈 1티어)
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Java
사용 언어: Java
사용 언어: Java
사용 언어: Java
사용 언어: Java
사용 언어: Python3, Java
사용 언어: Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3, Java
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
eval()
🌟)
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
공통점 BFS와 DFS 모두 연결된 그래프를 “완전 탐색”하는데 활용
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
재귀함수란 자기가 자기 자신을 반복하여 호출하는 함수이다. 이러한 특성을 이용해 “반복문”의 효과를 낼 수 있다. (알고리즘 문제 풀이에서 재귀함수는 반복문의 대체제로 볼 수 있다!) 아래 두 예제 비교해보자 예제 1 ```py def DFS(x): if x > 0: ...
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
이 글을 참고했다.
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
탐색이란? 특정 조건을 만족하는 상태를 찾기 위한 일련의 과정이다.
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
1. 비트 연산자 활용하기 이 글을 참고하자
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Python3
사용 언어: Java
사용 언어: Java
스프링 클라우드
현재, E-commerce App를 실행하는데 필요한 모든 서비스들이 도커 컨테이너로 기동 중이다. 이번에는 포스트맨을 이용해 정상적으로 작동하는지 테스트해보자.
이전 글에 이어서 진행해보자. 우선, 지금까지 도커 컨테이너를 이용해 배포한 서비스들은 아래와 같다.
이전 글에 이어서 진행해보자.
이전 글에 이어서 진행해보자.
이전 글에 이어서 진행해보자.
개요 Running Microservices 마이크로 서비스를 운영하는 방식에는 아래 보이는 여섯가지가 있다. 이 중에서, 이번 글에서는 [Docker + Local]을 다뤄볼 것이다. 나중에 다른 환경에 배포한다고 해도, Docker 이미지를 그대로 컨테이너화 시켜 사용할 수 ...
Dockerfile을 이용해 user-service라는 마이크로 서비스의 이미지 파일을 생성해보자. https://hub.docker.com
컨테이너 가상화 Virtualization 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공- 플랫폼 가상화- 리소스 가상화 하이퍼바이저 (Hypervisor)- Virtual Machine Manager (VMM)- 다수의 운영체제를 동시에...
이번에는 Prometheus와 Grafana를 연동해 Micrometer의 정보를 시각화해보자.
개요 Micrometer Micrometer- https://micrometer.io/- JVM 기반의 애플리케이션의 Metrics 제공- Spring Framework 5, Spring Boot 2부터 Spring의 Metrics 처리- Prometheus등의 다양한 모니터...
이전 글에서는, 마이크로 서비스 간 통신에서 문제가 발생했을 때, circuit breaker를 사용해 연쇄적으로 문제가 발생하는 것을 방지하는 방법을 알아봤다. 이번에는, 하나의 어플리케이션이 기동될 때, 여러 마이크로 서비스를 사용할텐데, 이 때 해당하는 요청 정보가 어떻게 실...
마이크로 서비스 간의 통신 시 발생할 수 있는 대표적인 오류와 그것을 해결할 수 있는 방법에 대해 알아보자.
토픽에 정보를 넣는 것 만으로 db에 데이터를 insert 하기 위해서는, 꼭 아래와 같은 JSON 형태로 넣어야 했다. 이를 java 코드로 바꾸면 아래와 같다. 위 사진에서처럼 schema와 payload를 각각 객체로 만들고, 이들을 담고 있는 dto 객체를 하나 만들자....
Multi Orders Microservice 사용에 대한 데이터 동기화 문제 order-service를 두 개 기동한다고 했을 때, 각각의 order-service가 독립적인 데이터베이스를 가지고 있다. 따라서 사용자의 요청 정보가 첫 번째 order-service의 인스턴스로...
데이터 동기화 order-service -> catalog-service order-service에 요청 된 주문의 수량 정보를 catalog-service에 반영 order-service에서 Kafka Topic으로 메시지 전송 -> Producer 역할 ...
1. 서버 기동 Zookeeper Server # 현재 위치: /Users/minju/study/msa/kafka-demo/kafka_2.13-2.7.0 $ ./bin/zookeeper-server-start.sh ./config/zookeeper.properties
이전 글에서 source connect에서 topic에 데이터를 전달하면, topic에 해당 데이터가 쌓이는 것까지 확인했다. sink connect가 하는 역할은, topic에 전달된 데이터를 가져와서 사용하는 것이다. (Kafka-console-producer에서 데이터 전송 ...
메세지를 보내고, 가져오는 작업에 있어서 Kafka Connect가 사용되고, Source와 Sink가 쓰일 것이다.
이 전 글에는 Kafka를 이용해 Producer와 Consumer를 사용해보았다. 이번에는 이어서 Kafka Connect를 사용해보자. 데이터베이스에 저장된 값을 또다른 데이터베이스에 이동하는 예제를 테스트해보기 위해, MariaDB부터 설치하자.
개요 Kafka 사용 이전 End-to-End 연결 방식의 아키텍처 데이터 연동의 복잡성 증가 (HW, 운영체제, 장애 등) 서로 다른 데이터 Pipeline 연결 구조 확장이 어려운 구조
하나의 마이크로 서비스를 하나 이상의 인스턴스에서 기동했을 때, 즉, 클라이언트의 요청이 여러 개가 들어왔을 때, 부하분산을 처리하기 위해서 여러 개의 인스턴스를 띄울 수 있다. (-> 랜덤 포트를 활용한 로드밸런싱)
이번에는 ErrorDecoder를 이용한 예외 처리를 해보자. user-service FeignErrorDecoder.java ```java public class FeignErrorDecoder implements ErrorDecoder {
FeignClient를 사용하면서 유용한 기능(로그, 예외처리)들에 대해 살펴보자.
FeignClient FeignClient -> HTTP Client- REST Call을 추상화한 Spring Cloud Netflix 라이브러리 사용 방법- 호출하려는 HTTP Endpoint에 대한 Interface를 생성- @FeignClient 선언 Lo...
개요 Communication Types 동기 & 비동기 방식 스프링 클라우드로 개발 된 마이크로 서비스들 간에는 동기 방식과 비동기 방식으로 서로 통신을 할 수 있다. Synchronous HTTP communication- 하나의 클라이언트 요청이 들어왔을 때, 해...
application.yml 혹은 bootstrap.yml에 있는 plain text 값들을 암호화처리하는 방법에 대해 알아보자.
Actuator를 사용했을 때는, 구성 정보가 변경되었을 때 각각의 서비스(어플리케이션)에 대해서 매번 /actuator/refresh를 호출해야하는 불편함이 있었다. 이번에는 Spring Cloud Bus라는 기능을 이용해 일괄적으로 업데이트 해보자.
이번에는 Git에 연동하지 않고 Local 파일 시스템에 있는 구성 정보를 사용하는 방법에 대해 알아보자. (Native File Repository는 로컬에 있는 디렉토리를 말한다.)
config-service
와 깃 레포 연동
지금까지는 Local Git Repository에서 관리하던 구성 정보를 Remote Git Repository에 올려보자. (사실 나는 이전에 Remote Git Repository에도 push 해놓았지만, 소스코드를 올린 후 config-server에도 수정사항이 있어 기록한...
멀티 환경에서 구성 정보를 달리 할 수 있는 방법에 대해 알아보자. 이를 위해, 다양한 profiles를 가진 구성 정보 파일(yml)을 여러개 만들어놓고 상황에 맞는 yml 파일을 적용할 것이다.
이번에는 gateway-service와 config-service를 연동해보자. 이전 글에서 user-service와 config-service를 연동할 때와 비슷하다.
지금까지 user-service, order-service, catalog-service를 개발했다. 지금까지는 구성정보 파일을 application.yml 파일을 사용했었는데, 문제는 구성 정보가 변경되면 서비스 자체를 다시 빌드한 뒤에 배포해야 한다는 것이다. 이러한 점을 개선...
개요 전통적인 인증 시스템 클라이언트 단에서 authenticate 요청을 위해 username과 password를 서버에 전달한다. 서버 단에서 인증 절차를 거친 뒤에 200 OK 라면 세션을 발급해 쿠키에 sessionId를 담아 응답한다. 클라이언트 단에서 이후 ...
저번에 만들었던 user-service에 로그인 성공 처리 로직을 추가해보자.
저번에 만들었던 user-service에 인증 기능을 추가해보자.
Catalog Microservice catalog-service는 사용자가 주문을 하기 전 상품 목록을 확인하기 위한 용도로 사용된다.
이전까지는, user-microservice에 랜덤포트가 적용되어있기 때문에 매번 유레카를 통해 user-microservice의 포트번호를 확인한 뒤에 요청해야했다. 그런데 user-microservice를 게이트웨이 서비스에 등록하게 되면, 할당된 포트에 상관없이 서비스의 n...
개요 user-microservice는 UI는 없이 REST API 형식으로 구현할 것이다. 그리고 위 사진에서 보이는 기능들을 개발할 것이다.
E-commerce란, 전자상거래로 쉽게 말해 쇼핑몰 서비스라고 할 수 있다. 이번에는 비즈니스 로직이라던가 도메인에 포커스를 맞추는게 아니라, 스프링 클라우드와 스프링 부트를 이용해 마이크로 서비스를 만드는 것 자체에 포커스를 맞출 것이다. 전체 어플리케이션 개요를 살펴보자.
이번에는 Spring Cloud Gateway와 Eureka 서버를 연동해보자. 유레카라는 네이밍 서비스에 스프링 게이트웨이를 등록하고, first-service와 second-service까지 등록해보자.
이 전에 살펴본 Global Filter를 로깅 출력에 적용해보자. 코드 apigateway-service filter/LoggingFilter.java 이 전에 만든 GlobalFilter와 같은 위치에 LoggingFilter를 생성한다. ```java @Component @S...
Global Filter도 이전 글에서 만든 Custom Filter와 비슷한 방식으로 만들 수 있다. (apply() 메서드 지정) 하지만 Global Filter는 “공통” 필터라는 점에서 Custom Filter와 차이가 있다. Custom Filter는 아래와 같이 라우팅 ...
Custom Filter는 사용자 정의 필터로 로그를 출력하거나, 인증을 처리하거나, 로케일을 바꿀 수 있다. 이번에는 직접 Custom Filter를 정의해 등록해보자.
Spring Cloud Gateway에서 필터가 어떤한 동작에 의해 작동하는지, 프로세스를 살펴보자.
Netflix Zuul은 Spring Boot 2.4.x 버전부터는 사용할 수 없기 때문에, 대신해서 Spring Cloud Gateway를 사용해 게이트웨이 서비스와 라우팅 서비스를 구현해보도록 하자. Spring Cloud Gateway는 Zuul과 달리 비동기 처리가 가능하다...
사용자나 외부 시스템으로부터의 요청을 단일화하여 처리할 수 있도록 해주는 API Gateway Service에 대해 알아보자. 1. API Gateway Service 역할 API Gateway Service는 사용자가 설정한 라우팅 설정에 따라 각각의 엔드포인트로 클라이언트를 대...
이전 글에서처럼 모든 작업을 할 때 마다 포트 번호를 등록하는 것은 상당히 불편한 작업이다. 이런 작업을 간단히 하기 위해서 spring boot에서 지원해주는 랜덤포트 방식을 사용해보자.
1. UserService 이번에는 유레카 서버에 등록할 수 있는 샘플 마이크로 서비스를 만들어보자.
Spring Cloud란 기존의 모놀리스 방식이 아닌, 각각의 기능을 독립적으로 개발하기 위한 마이크로 서비스 아키텍쳐(MSA)를 지원하기 위한 프레임워크이다.
MSA 표준 구성 요소
SOA vs. MSA Service Oriented Architecture 와 Microservice Architecture의 공통점과 차이점에 대해 알아보자.
Microservice 위 사진은 아마존과 넷플리스의 마이크로 서비스에 대한 구성도이다. 두 회사는 클라우드 서비스를 가장 잘 사용하고 있고, 활발히 서비스하고 있으며, 외부로 공개하고 있는 회사로 알려져 있다. 아마존의 마이크로 서비스 구성도를 보면, 회색의 점들은 마이크로 서...
시스템을 구축하고 운영하는 방식 중에, 모놀리식 방식과 마이크로 방식에 대해 알아보자.
클라우드 네이티브 어플리케이션을 구축함에 있어 고려해야할 열 두가지 항목인 12 Factors에 대해 알아보자. 그럼 이제 이 열 두가지에 대해 하나씩 살펴보자.
이 전 글에서 Cloud Natice Architecture에 관해 살펴보았다. Cloud Natice Architecture에 의해 설계되고 구현되는 어플리케이션을 Cloud Native Application이라고 한다. Cloud Native Application는, 이전에 ...
2010년대 이후부터 IT 시스템은 Antifragile 또는 Cloud Native Architecture 형태로 발전되어왔다. 기존에 로컬 한경이나 사내에서 구축하고 운영하였던 시스템을 클라우드 환경으로 전환하기 위해서 어떠한 아키텍처를 가져야 하는지 알아보자
Antifragile Auto scaling: 자동 확장성을 갖는다. Microservices: 클라우드 네이티브 어플리케이션의 핵심이다. Chaos engineering Continuous deployments
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
❄️ David Malan 교수의 컴퓨터 과학 교양 강좌: CS50을 바탕으로 정리한 내용입니다.
aws ec2 cpu 사용량 100% 서버부하 원인 이 글을 참고했다.
결과적으로 구축할 환경은 아래와 같다.
IntelliJ의 자바 프로젝트에 코딩 컨벤션 적용하자.
⚠️ 노트북에 jdk는 이미 설치되어 있다는 가정 하에 진행한다
이전 글은 이미지 하나를 업로드 할 수 있는 api를 구현했다. 이번에는 이미지 리스트(List<MultipartFile>)를 업로드 할 수 있도록 변경해보자. 우선, 기존에 작성한 ImageService.java와 S3Uploader.java는 삭제하였다.
S3에 이미지 업로드하기 1. gradle에 dependency 추가 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
버킷 생성 1. 버킷 이름 설정 주의 버킷 이름을 설정하고, 🚨”ACL 활성화됨”을 클릭한다. (처음에 비활성화됨을 클릭했다가 에러가 발생했다…) 그리고 AWS 리전은 🌟”EC2와 동일한 리전”을 선택해야 요금이 청구되지 않는다!!
네이버 개발자 센터 설정
1. 우분투 인스턴스에 환경변수 파일 생성 env ⎿ application-oauth.yml ⎿ application-jwt.yml
이 글에서 카카오 디벨로퍼스 등록을 마쳤다. 이제 카카오 로그인을 적용해보자!
도입 OAuth 2.0 Sequence Diagram
application.yml 파일에 ${} 형식으로 환경 변수를 작성했다. 이후부터는 인텔리제이 실행 시 환경변수를 주입하여 실행해야 한다.
도입 OAuth 2.0 Sequence Diagram
이 글을 참고했다.
⚠️ 이 글은 Spring Rest Docs 적용 후에 테스트 코드를 작성하는 방법 위주로 설명할 예정이다. 아직 Spring Rest Docs가 적용되어 있지 않다면, 이 글을 참고하자.
소나큐브를 이용해 코드 정적 분석을 실시하였다. 아래와 같이 수많은 Code Smell과 Bug 또한 발견되었다. 이제부터 코드를 수정하면서 기억에 남는 것 위주로 기록하려 한다.
이 글을 참고했다.
기존에 우분투 서버 자체에서 설치했던 mysql을 도커 컴포즈를 이용하여 설치하고 배포할 예정이다. 이전에 정리해놨던 글을 참고하여 Jenkins를 통한 애플리케이션 빌드 및 자동 배포 슬랙으로 젠킨스 알림 받기 젠킨스와 소나큐브 연동하기
이전에 이 글에서 젠킨스를 도입하였고, 이 글에서 소나큐브까지 연동해보았다.
이전에 이 글에서 젠킨스를 도입해보았다. 이번에는 젠킨스와 소나큐브를 연동하여 정적 검사를 통해 코드 품질을 향상시켜보자.
이 글을 참고했다.
이 글을 참고했다.
이 글을 참고했다.
개념 이 글을 참고했다.
Spring Rest Docs는 우아한 형제들 기술블로그를 보고 적용해보고 싶은 마음이 들었다.
aws-s3.yml
)
이 글을 참고했다.
docker compose 를 사용해 프로젝트를 만들고 있는데, 소스코드가 변경될 때마다 매번 빌드하고 실행하는 과정이 번거로웠다. 스크립트를 작성해 버거로운 과정을 줄여보자.
1. Ubuntu에 Docker Engine 설치 공식 사이트를 참고했다.
드디어 프리코스 1주차 메일이 왔다. 앞으로 4주동안 ‘과정’ 중심으로 소감을 작성해보자!
타임존 확인 http://{JENKINS_IP}:{JENKINS_PORT}/systemInfo에 접속한 뒤, timezone을 검색하면 확인할 수 있다.
spring boot 프로젝트에서는 한국 시간으로 보내는데, 포스트맨으로 테스트해보면 UTC 로 나와 당환한 적이 있었다. 아래처럼 ec2 인스턴스에 접속해 타임존을 변경하자.
0. 로컬(mac)에서 jenkins 설치 1) Jenkins 설치 brew를 통해 젠킨스를 설치한다. $ brew install jenkins 젠킨스를 설치한다음 아래의 명령어로 젠킨스를 제어할 수 있다. start 명령어를 통해 젠킨스를 실행한다. $ brew services...
JWT를 사용하면서 access token의 페이로드 안에 있는 exp 정보를 가져와야할 일이 생겼다.
게시판 서비스를 구현하고 있는데, RequestBody에 들어갈 게시판 타입을 enum으로 정의했다. 이 때, 해당 타입을 string 형태로 앞의 세 글자만 넣고 싶었다.
특정 게시글을 조회할 때, 조회 수가 중복으로 카운트 되지 않도록 쿠키를 이용해 구현해보자. 서버 PostServiceImpl.java ```java @Override @Transactional public DetailedPostInfoDto getDetailedPostInfo(L...
1. firebase 설정 클라이언트 프로젝트 생성이 완료되면 클라이언트 프로젝트에 넣어야 할 설정파일을 받아야 한다. 사진처럼 각 클라이언트에 맞는 플랫폼을 선택한다.
설치 및 실행 설치 pip3 install --upgrade pip pip3 install jupyter
개요 Cursor-Based vs Offset-Based pagination을 구현하기 위한 방식에는 offset-based와 cursor-based가 존재한다. 오프셋 기반 방식- 1억번~1억+10번 데이터 주세요. 라고 한다면 → 1억+10번개의 데이터를 읽음 커서 기...
AuthenticationEntryPoint 인증 과정에서 실패하거나 인증을 위한 헤더정보를 보내지 않은 경우 401(UnAuthorized) 에러가 발생하게 된다. Spring Security에서 인증되지 않은 사용자에 대한 접근 처리는 AuthenticationEntryPoin...
[별도이름].yml
에서 데이터 가져오기 (for 환경변수 관리)
redis 연결을 위해 RedisConfig.java를 작성해야 했는데, 이때 port와 host 정보를 직접 적는 것이 아니라, 따로 secret.yml에 기입한 뒤에, 해당 파일은 .gitignore를 통해 깃에 올리지 않고 해당 정보만 가져와서 사용하고 싶었다. 아래와 같이...
1. 준비 코드를 다운로드 받는다. 깃허브에서 두 개의 파일을 다운로드 받는다.
프로젝트 생성 Spring Initializr를 이용했으며, 설정은 아래와 같이 했다.
상속관계 매핑
데이터베이스 스키마 자동 생성 hibernate.ddl.auto create: 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop: create와 같으나 종료시점에 테이블 DROP update: 변경분만 반영 (운영DB에는 사용하면 안됨)...
Swagger란? 로젝트 내 API를 Swagger 설정을 통해 자동으로 문서화해주는 도구로 사람이 일일이 작업할 필요 없이 프로젝트 실행을 통해 코드 내에서 변경사항(return 유형이나 parameter 수 변경 등)이 발생하여도 바로 자동으로 API문서를 만들어주므로 매우 편...
1. 요구사항 분석 - 기능 목록 회원 기능 • 회원 등록 • 회원 조회 상품 기능 • 상품 등록 • 상품 수정 • 상품 조회 주문 기능 • 상품 주문 • 주문 내역 조회 • 주문 취소 기타 요구사항 • 상품은 재고 관리가 필요하다. • 상품의 종류는 도서, 음...
프로젝트 생성 https://start.spring.io/에서 아래와 같이 설정한 뒤에 프로젝트를 생성한다.
1. 회원(Member) 등록 JDBC를 사용해서 회원( Member ) 데이터를 데이터베이스에 관리하는 기능을 개발해보자.
주의 🚨 H2 데이터베이스 서버를 먼저 실행해두자.
JDBC는 1997년에 출시될 정도로 오래된 기술이고, 사용하는 방법도 복잡하다. 그래서 최근에는 JDBC를 직접 사용하기 보다는 JDBC를 편리하게 사용하는 다양한 기술이 존재한다. 대표적으로 SQL Mapper와 ORM 기술로 나눌 수 있다.
JDBC 등장 이유 애플리케이션 서버와 DB 일반적인 사용법
요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 문제는 로그인 하지 않은 사용자도 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다는 점이다. 이를 해결하기 위해서, 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠...
이전 프로젝트에 이어서 로그인 처리 기능을 학습한다. 🔎 package 구조 도메인이 가장 중요하다. 도메인 = 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말함 향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 ...
소개 검증 기능을 지금처럼 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화 한 것이 바로 ...
🧩 오류 코드와 메시지 처리 1 FieldError 생성자 FieldError 는 두 가지 생성자를 제공한다. public FieldError(String objectName, String field, String defaultMessage); public FieldError(St...
검증 요구사항 상품 관리 시스템에 새로운 요구사항이 추가되었다.
이전 프로젝트에 이어서 메시지, 국제화 기능을 학습해보자.
타임리프 스프링 통합 타임리프는 크게 2가지 메뉴얼을 제공한다.
타임리프 특징 서버 사이드 HTML 렌더링 (SSR) 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다.
흐름 서블릿은 JSP와 같은 뷰 템플릿 기능이 약해서 불편했다. (서블릿은 비즈니스 로직에 html 사용, JSP는 뷰 로직에 자바 사용) JSP에 기능을 다 담자니, 코드가 하나의 JSP에 다 들어가니까 유지보수가 힘들었다. 로직이 있는 쪽은 서블릿으로 해결하고, 뷰...
개요 이전글에서 다룬 상품 등록 처리 컨트롤러는 심각한 문제가 있다. (addItemV1 ~ addItemV4) 상품 등록을 완료하고 웹 브라우저의 새로고침 버튼을 클릭해보자. 상품이 계속해서 중복 등록되는 것을 확인할 수 있다.
✅ 상품 목록 컨트롤러 컨트롤러 로직은 itemRepository에서 모든 상품을 조회한 다음에 모델에 담는다. 그리고 뷰 템플릿을 호출한다. ```java @Controller @RequestMapping(“/basic/items”) //@RequiredArgsConstructo...
1. 개요 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다.
HTTP 응답 - 개요 응답 데이터는 이미 앞에서 일부 다룬 내용들이지만, 응답 부분에 초점을 맞추어서 정리해보자. 스프링(서버)에서 응답 데이터를 만드는 방법은 크게 3가지이다. 정적 리소스예) 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적 리소스를 사...
HTTP 요청 - 기본, 헤더 조회 애노테이션 기반의 스프링 컨트롤러는 다양한 파리미터를 지원한다. HTTP 헤더 정보를 조회하는 방법을 알아보자. ```java @Slf4j // 로그를 선언해준다. @RestController public class RequestHeaderCon...
프로젝트 생성 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트를 생성한다. https://start.spring.io
뷰 리졸버 resources>application.properties에 아래 코드를 추가한다. spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp 스프링 부트는 InternalResourceViewResol...
이전 글에서 직접 만든 MVC 프레임워크와 스프링 MVC를 비교해보자. 비교 직접 만든 MVC 프레임워크 구조 직접 만든 프레임워크 -> 스프링 MVC 비교 FrontController -> DispatcherServlet handlerMapp...
개요 FrontController 도입 전 FrontController 도입 후
MVC 패턴 이전 MVC 패턴을 적용하기 전, 하나의 서블릿이나 JSP는 비즈니스 로직과 뷰 로직을 모두 담당한다.
정적 리소스 고정된 HTML 파일. CSS, JS, 이미지, 영상 등을 제공 주로 엡 브라우저
들어가기 전에… 위와 같이 클라이언트가 요청을 하면 tcp/ip 커넥션을 맺고, 서블릿을 호출해준다. 이때, 서블릿을 누가 호출할까? 쓰레드 애플리케이션 코드를 하나하나 순차적으로 실행하는 것을 쓰레드라고 한다. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰...
서블릿 서블릿 컨테이너 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 종료하는 생명주기 관리 서블릿 객체는 싱글톤으로 관리- 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율- 최초 로딩 시점에 ...
캐시 기본 동작 (cache-control 헤더) 서버는 cache-control 헤더에 캐시가 유효한 시간(초)을 담아서 응답한다. 웹 브라우저는 내부에 있는 캐시 저장소에 서버의 응답 결과(캐시가 유효한 시간)를 저장한다. 두 번째 요청 부터는 캐시 유효시간 검사 ...
표현 표현 헤더는 전송, 응답 둘 다 사용
상태코드 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational): 요청이 수신되어 치리중 (거의 사용되지 않음) 2xx (Successful): 요청 정상 처리 3xx (Redirection): 요청을 완료하려면 추가 행동이 필...
참고하면 좋은 URI 설계 개념 문서(document) 단일 개념 (파일 하나, 객체 인스턴스, 데이터베이스 row) 예) /members/100, /files/star.jpg
스프링 애플리케이션 실행 시 아래 오류가 발생하는 경우가 있다. Error creating bean with name 'myLogger': Scope 'request' is not active for the current thread; consider defining a scop...
문제 상황 조회 대상 빈이 2개 이상이어서 NoUniqueBeanDefinitionException이 발생하는 상황
build.gradle 변경 build.gradle에 lombok 설정과 라이브러리를 추가한다. ```java plugins { id ‘org.springframework.boot’ version ‘2.7.0’ id ‘io.spring.dependency-management’ ...
1. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 예제 ```java packa...
1. 제어의 역전 IoC (Inversion of Control) 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 개발자 입장에서는 자연스러운 흐름이다. ...
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체지향 설계의 5가지 원칙을 정리
welcome page 만들기 spring.io
🌱 사전 준비 jdk: Java 11 IDE: intellij
문제 상황 AWS EC2에 Spring Boot 서버를 배포하고 하루를 채 버티지 못하고 죽었다. 인스턴스 중지 후 재기동하면 다시 살아나지만 살아나고 나서도 오래 버티지 못하고 또다시 죽는 현상이 반복되었다. AWS EC2 스팩 서버: AWS EC2 위치: Asia Pa...
문제 상황 카카오 로그인을 구현했는데, email_needs_agreement=true 로 설정되어 있었고 이메일을 받아오지 않고 null 값이 저장되었다.
문제 상황 아래와 같이 도커로 기동한 mysql 컨테이너에 한글이 깨져 ???으로 저장된다.
문제 상황 thymeleaf 를 사용하면서, Intelli J에서 개발할 때는 이상 없이 html 파일을 찾아가며 화면이 노출되었는데, 리눅스 환경(AWS)에서 jar로 build 하고 외부에서 실행하면 아래와 같은 에러를 발생시키면서 화면에 접근하지 못하는 경우가 생겼다.
문제 상황 프로젝트의 리모트 저장소에 develop 브랜치를 하나 파서, 작업을 했다. 그 후 인텔리제이에서 develop 브랜치로 체크아웃 해서 작업하려고 git checkout develop 명령어를 입력하니 다음과 같은 에러를 뿜었다. error: pathspec 'devel...
문제 상황 젠킨스 설정을 마치고 지금 빌드를 클릭했을 때 AWS 인스턴스 자체가 멈추었다. (젠킨스 설정에는 문제가 없는 것 같은데..)
문제 상황 mysql 컨테이너가 아래 에러를 뿜으며 Restart를 반복했다.
문제 상황 Mac 로컬 환경에서 도커를 실행하려고 하는데 도커 데몬이 실행되고 있냐는 에러를 뿜었다. docker --version으로 확인해봤을 때 도커는 설치되어 있었다. 도커 데스크탑은 이미 실행중이었다..
문제 상황 젠킨스를 이용해 프로젝트를 배포하고 있다. 기존에는 ./gradlew build jar -x test 로 테스트 코드 없이 빌드했는데, spring rest docs 를 적용하기 위해서는 테스 트코드까지 빌드해야하기 때문에 ./gradlew build jar 로 변경하...
문제 상황 Mockito를 이용하여 테스트 코드 작성 후 실행하니 아래와 같은 에러가 발생했다. java.lang.NullPointerException at {프로젝트명}.Service.AuthService.generateToken(AuthService.java:78) at {프로...
문제 상황 서버 api 를 클리이언트와 연동하며 문제가 발생했다. 혼자 테스트 할 때에는 잘 실행되던 api가 query did not return a unique result를 뿜었다.
문제 상황 스프링 기반 API 서버를 구현 프로젝트에서 Controller 테스트를 하는 도중 아래와 같은 에러가 발생했다. nested exception is org.springframework.http.converter.HttpMessageNotWritableException:...
문제 상황 엔티티 클래스 작성 후 서버를 실행하고, 포스트맨을 이용해 요청하는 도중에 해당 에러가 발생하였다.
문제 상황 소스코드를 변경했을 때 로컬에서 실행하면 변경사항이 적용되는데, 도커로 실행하면 변경사항이 적용되지 않는다…
문제 상황 docker-compose up -d 커맨드를 이용해 도커 컨테이너를 실행하려고 하는데 no space left on device 에러가 발생하는 상황이다.
문제 상황 SSH를 이용하여 서버에 접속하려하는데, 다음과 같은 오류가 발생하며 접속이 되지 않는다.
문제 상황 docker exec -it redis_db bash 커맨드로 Docker Container에 접속시 아래와 같은 에러가 발생하는 경우가 있다. OCI runtime exec failed: exec failed: unable to start container proces...
문제 상황 h2 데이터베이스를 사용하며 data.sql이라는 스크립트 파일을 이용해 초기 데이터를 생성할 때 문제가 발생했다.
문제 상황 ``` 2022-09-27 15:31:49.069 WARN 8598 — [ctor-http-nio-2] i.n.r.d.DnsServerAddressStreamProviders : Unable to load io.netty.resolver.dns.macos.MacOSD...
문제 상황 spring boot와 jpa를 사용해 좋아요한 게시글 리스트 조회 api를 구현하던 중, 위와 같은 에러가 발생했다.
문제 상황 mysql에 데이터를 insert 할 때, 현재 시각이 18:00 라면 9:00 로 삽임되었다.
문제 상황 QuerDSL을 사용하던 중 아래와 같은 에러가 발생했다. java.lang.NoSuchFieldError: TREATED_PATH at com.querydsl.jpa.JPQLTemplates.<init>(JPQLTemplates.java:147) ~[que...
문제 상황 AWS S3 연결을 시도하던 중 아래와 같은 에러가 발생했다. "com.amazonaws.services.s3.model.AmazonS3Exception: The bucket does not allow ACLs (Service: Amazon S3; Status Code:...
문제 상황 spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open...
문제 상황 Spring boot 실행시 아래와 같은 Warning이 발생하여 원인을 찾아보았더니, 스프링 부트 응용 프로그램을 동시 실행하고 있을때 주는 경고라고 한다.
문제 상황 Spring Boot 서버를 실행해놓고 다음 날 확인해보니 아래와 같은 로그가 찍혀있었다. 2018-11-28 02:44:21.892 WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool : ...
문제 상황 AWS RDS MySQL을 사용하던 중, 데이터가 들어가지 않고 에러가 발생하였다.
문제 상황 vscode에서 .py 파일이 실행되지 않음
문제 상황 git push 명령이 실행되지 않음.
문제 상황 table drop 명령이 실행되지 않음.
문제 상황 docker-compose up 명령을 실행했을 때 “no matching manifest for linux/arm64/v8 in the manifest list entries” 에러가 발생했다.
문제 상황 기존에는 로컬에서 npm run dev를 통해 서버를 실행했다. 이후에 docker를 이용했고 docker-compose up 명령을 입력했을 때, bcrypt에서 ELF header가 유효하지 않다는 에러가 발생했다.
modf math.modf() 함수는 입력값을 정수와 소수 부분으로 분리해 반환한다.
여러 값을 한 번의 호출로 출력 리스트 원소나 문자열 각각의 문자를 한 칸 씩 띄운 후 출력한다. ans = [1, 2, 3] print(*ans) 1 2 3
문자열 ```py S = “abcabc” print(S.index(“c”)) # 2 print(S.rindex(“c”)) # 5 print(S.rindex(“e”)) # 🚨 존재하지 않는 값 - 에러 발생
아래와 같이 5개의 알파벳을 담고 있는 리스트를 순회하며 출력하고 싶다면? letters = ['A', 'B', 'C', 'D', 'E'] for문을 이용해 순서대로 접근할 수 있다. for letter in letters: print(letter, end=' ') # A B...
reduce 함수란 reduce 함수는 반복 가능한 객체이다. 각 요소들을 이전 연산 결과들과 누적하여 반환한다. functools 모듈에서 불러와야 한다. from functools import reduce
이 글을 참고했다.
이 글을 참고했다.
이론 이 글을 참고했다.
참고 [Python 문법] 정규표현식 (Regular Expressions) FE UKKO의 알잘딱깔센 정규표현식 기초 개념 및 실습입니다!!! [파...
이 글을 참고했다.
이 글과 이 글을 참고했다.
이 글을 참고했다.
이 글을 참고했다.
이 글과 이 글을 참고했다.
이 글을 참고했다.
이 글을 참고했다.
공통점 ```py S = ‘banana’
리스트의 요소별로 빈도수 카운트 하기 ```py from collections import Counter
tuple에서 특정 값 기준으로 큰 원소 찾기 arr = [(1,10),(10,14),(2,2),(5,24)] k = max(arr, key = lambda x:x[0]) print(k) # (10, 14) # k는 tuple 타입
10진수와 2진수 변환하기 ```py 13(10진수)을 2진수로 변환 print(bin(13)) # 0b1101
append()
, extend()
, insert()
차이점
파이썬에서 리스트에 새로운 원소를 추가하는 방법에는 총 세 가지가 있다. 각각의 차이점에 대해 알아보자.
List Comprehension (리스트 내포)
문자열과 내장함수 upper와 lower msg="It is TIME" print(msg.upper()) print(msg.lower()) 출력 IT IS TIME it is time 문자열 slicing print(msg[:2]) # 0부터 1 인덱스까지 자르기 print(m...
리스트와 내장함수 (2) 리스트 slicing ```py a = [23,12,36,53,19]
리스트와 내장함수 (1) 리스트의 선언 a=[] # 빈 리스트 b=list() # 빈 리스트 a=[1,2,3,4,5] b=list(range(6,11)) # 6 7 8 9 10 두 리스트를 이어붙이기 print("a+b: ",a+b) # a+b: [1, 2, 3, 4, 5, 6...
들어가기 앞서.. 람다함수란 이름이 없는 익명의 함수이다. 일반적인 함수 인자값을 받은뒤, 1를 더해서 리턴하는 함수가 있다고 하자. ```py def plus_one(x): return x+1
조건문 if문 ```py x=7 if x==7: print(“Lucky”)
함수 만들기 반환값이 없는 함수 ```py def add(a,b): c=a+b print(c)
반복문 for문 ```py a=range(10) print(list(a)) # [0,1,2,3,4,5,6,7,8,9] a=range(1,11) print(list(a)) # [1,2,3,4,5,6,7,8,9,10]
방문 길이 문제 정리 명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요.
스킬트리 문제 정리 선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
점프와 순간 이동 문제 정리 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용...
영어 끝말잇기 문제 정리 사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요. 탈락하는 경우 이전에 말...
배달 문제 정리 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 마을의 개수 N, 각 마을을 연결하는 도로의 정보 road, ...
소수 만들기 문제 정리 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고...
소수 만들기 문제 정리 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solu...
사과나무 문제 정리 입력 5 10 13 10 12 15 12 39 30 23 11 11 25 50 53 15 19 27 29 37 27 19 13 30 13 19 처리 과정 정가운데 좌표를 큐에 넣고 탐색을 시작한다. 큐에서 좌표 하나를 pop 해서 그 좌표로부터 시계 ...
송아지 찾기 문제 정리 입력 5 14 처리 과정 큐를 생성한다. 출발지로부터의 거리(dis[])와 중복체크(ch[]) 리스트를 각각 0과 1로 초기화한다. 큐에서 하나(=cur)를 pop 해서 방문한 뒤에, 거기서부터 -1, +1, +5인 지점을 큐에 넣고 순서대로 ...
양팔저울 문제 정리 입력 3 // 추의 개수 1 5 7 // 각각의 추의 무게 처리 과정 추를 양팔저울 왼쪽에 놓는 경우, 오른쪽에 놓는 경우, 사용하지 않는 경우로 나눈다. 왼쪽에 놓으면 추의 무게(weight[L])를 더한다. 오른쪽에 놓으면 추의 무게(weigh...
휴가 문제 정리 입력 7 4 20 2 10 3 15 3 20 2 30 2 20 1 10 처리 과정 상담 일수와 금액을 리스트에 담기 v(상담 날짜)가 n일 때까지는 else에서 처리하고 n+1일 때 max를 갱신한다. 상담을 진행하기 전에, 그 상담을 진행하고 나서...
최대 점수 구하기 문제 정리 입력 5 20 10 5 25 12 15 8 6 3 7 4 처리 과정 문제의 점수와 푸는데 걸리는 시간을 리스트에 담기 v(문제 번호)가 n일 때까지는 else에서 처리하고 n+1일 때 max를 갱신한다. 문제를 푸는 상황에서 DFS() 재...
경로 탐색 문제 정리 입력 5 9 1 2 1 3 1 4 2 1 2 3 2 5 3 4 4 2 4 5 처리 과정 인접행렬 리스트(g[][])와 방문할 노드를 체크 할 리스트(visited[]) 생성한다. 인접행렬 리스트를 초기화한다. DFS()가 끝나는 시점은 노드번호...
인접행렬 시작하기 전에… 무방향 그래프란? 두 노드(a,b)가 연결되어있을 때 a->b도 가능하고 b->a도 가능하다. 입력 5 5 1 2 1 3 2 4 3 4 4 5 무방향 그래프 구현 ```py import sys sys.stdin = open(“./input/in...
라이브러리를 이용한 조합 문제 정리 6-11의 수들의 조합 문제를 itertools 라이브러리를 이용해 간단히 풀어보자!
라이브러리를 이용한 순열 문제 정리 6-9의 수열 추측하기 문제를 itertools 라이브러리를 이용해 간단히 풀어보자!
수들의 조합 문제 정리 입력 5 3 2 4 5 8 12 6 처리 과정 이전에 풀었던 조합 문제와 유사하지만, 여기에서는 1,2,3,4,5 같은 1부터 n까지 수가 아니라 2,4,5,8,12 같이 요소가 n개인 무작위 리스트(=lst)가 주어진다. 조합의 합이 m의 배수인...
수열 추측하기 문제 정리 입력 4 16 처리 과정 파스칼의 삼각형의 마지막 값을 구하기 위해서는 처음 입력된 숫자 리스트(=res)와 이항계수(=coef) 값을 일대일 곱셈하는 것이다. 이항계수의 값을 구하는 방법은 조합을 이용한다. (n=4라면 이항계수는 [1(=3C0...
순열 구하기 문제 정리 입력 3 2 처리 과정 중복을 허락하지 않는 체크리스트(=ch) 생성 (인덱스 번호가 동일하도록 n+1개 생성) 순열 결과 리스트(=res[L])에 값 넣기 전에, 체크리스트의 값이 0인지 확인 체크리스트 값이 0 이라면, 1을 집어넣고 순열 ...
동전교환 문제 정리 입력 3 1 2 5 15 처리 과정 레벨(=L)과 동전의 합(=sum)을 파라미터로 갖는 DFS() 선언 동전 리스트(=coin)를 내림차순 정렬 한 뒤 큰 수부터 sum에 누적하며 재귀 sum이 m일 때의 레벨(=L)로 min 갱신
중복순열 구하기 문제 정리 입력 3 2 처리 과정 중복순열 결과 리스트(res[L])에 값 넣고 DFS(L+1)로 재귀 L이 m(=2)이 되면 res 출력 총 개수를 카운트하기 위한 global 변수 cnt
조합 구하기 문제 정리 입력 4 2 처리 과정 DFS()의 인자로 src를 하나 더 주기 src는 for문의 시작지점으로, DFS를 재귀 호출할 때에 +1 해준다.
바둑이 승차 문제 정리 입력 259 5 81 58 42 33 61 처리 과정 i가 n과 같지 않을 때, DFS에 다음 인덱스(=i+1)와 누적합(=sum)을 전달 이때 누적합은 원소로 사용될 때는 해당 lst 값을 누적하고, 사용되지 않을 때는 그대로 전달 n-1까지...
합이 같은 부분집합 문제 정리 입력 6 1 3 5 6 7 10 처리 과정 원소들을 리스트 형태로 입력받기 리스트의 합(=total) 계산 DFS의 파라미터로 인덱스(=i)와 누적합(=sum) 전달 i가 n과 같지 않을 때, DFS에 다음 인덱스(=i+1)와 누적합...
부분집합 구하기 문제 정리 입력 3 처리 과정 원소를 부분집합으로 사용할 때와 사용하지 않을 때의 상태로 나눠서 접근 상태를 담을 체크 리스트(ch) <- 원소 번호와 ch의 인덱스가 동일 ch[i]==1이면 사용, ch[i]==0이면 사용하지 않음 종착 지...
이진트리 순회 문제 정리 처리 과정 전위순회 노드의 값이 7보다 크면 재귀 종료 DFS 함수 본연의 일 왼쪽 자식노드(DFS(v*2)) 방문 오른쪽 자식노드(DFS(v*2+1)) 방문
재귀함수를 이용한 이진수 출력 문제 정리 입력 11 처리 과정 재귀함수 정의 x를 2로 나눈 나머지를 출력 파라미터에 x 대신 x//2를 전달하면서 재귀함수 호출 순서를 거꾸로 출력하기 위해서 출력문(2번)과 재귀문(3번)의 위치 바꾸기
코딩테스트 데모 예제로 나왔던 문제이다.
없어진 기록 찾기 문제 정리 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요. 풀이 SELECT A.animal_id, A.name from animal_ou...
중성화 여부 파악하기 문제 정리 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 ‘Neutered’ 또는 ‘Spayed’라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 ...
NULL 처리하기 문제 정리 입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 “No na...
DATETIME에서 DATE로 형 변환 문제 정리 ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다. 풀이 SELECT animal_id,name,DATE...
중복 제거하기 문제 정리 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다. 풀이 SELECT COUNT(DISTINCT name) AS count from animal_...
입양 시각 구하기(1) 문제 정리 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다. 풀이 SELECT ho...
동물 수 구하기 문제 정리 동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요. 풀이 SELECT count(*) as count from animal_ins 정리 출력 결과를 아래와 같이 count만 보고 싶다면, select 이후에 , 없이 바로...
이름에 el이 들어가는 동물 찾기 문제 정리 보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 ‘el’이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 “EL”이 들어가는 개의 아이디와 이름을 조회...
동명 동물 수 찾기 문제 정리 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요. 풀이 SELECT name, count(nam...
최솟값 구하기 문제 정리 동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요. 풀이 SELECT MIN(datetime) from animal_ins 정리 데이터 최대,최소 값 가져오기 SELECT MAX(컬럼) FR...
루시와 엘라 찾기 문제 정리 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요. 풀이 SELECT animal_id, name, sex_...
고양이와 개는 몇 마리 있을까 문제 정리 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요. 내 답 SELECT animal_type, count(animal_type) as count from...
여러 기준으로 정렬하기 문제 정리 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다. 내 답 SELECT animal_id, name, d...
어린 동물 찾기 문제 정리 동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. 내 답 SELECT animal_id, name from animal_ins order by animal_id asc
어린 동물 찾기 문제 정리 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. 내 답 SELECT animal_id, name from animal_ins where intake_condition!...
아픈 동물 찾기 문제 정리 동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. 내 답 SELECT animal_id, name from animal_ins where intake_condition=...
이름이 있는 동물의 아이디 문제 정리 동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다. 내 답 SELECT animal_id from animal_ins where name is not null ...
역순 정렬하기 문제 정리 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. 내 답 SELECT name,datetime from animal_ins order by animal_id desc...
이름이 없는 동물의 아이디 문제 정리 동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다. 내 답 SELECT ANIMAL_ID from ANIMAL_INS where NAME is NU...
최댓값 구하기 문제 정리 가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요. 내 답 SELECT MAX(DATETIME) from ANIMAL_INS 정리 데이터 최대,최소 값 가져오기 SELECT MAX(컬럼) FROM 테이블...
상위 n개 레코드 문제 정리 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요. 내 답 SELECT name from animal_ins order by datetime limit 1 정리 조회할 레코드의 개수 지정하기 ...
모든 레코드 조회하기 문제 정리 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. 내 답 SELECT * from ANIMAL_INS order by ANIMAL_ID ASC; 정리 데이터 오름차순, 내림차순 조회 ...
구명보트 프로그래머스 구명보트 문제를 풀어보자.
문제 1: 거스름돈 프로그래머스 카펫 문제를 풀어보자.
문제 1: 거스름돈 백준 11404번을 풀어보자.
1. 신장 트리 란? Spanning Tree, 또는 신장 트리 라고 불리움 (Spanning Tree가 보다 자연스러워 보임) 원래의 그래프의 모든 노드가 연결되어 있으면서 트리의 속성을 만족하는 그래프 신장 트리의 조건 본래의 그래프의 모든 노드...
1. 최단 경로 문제란? 최단 경로 문제란 두 노드를 잇는 가장 짧은 경로를 찾는 문제임 가중치 그래프 (Weighted Graph) 에서 간선 (Edge)의 가중치 합이 최소가 되도록 하는 경로를 찾는 것이 목적
문제 1: 거스름돈 백준 5585번을 풀어보자.
문제 백준 11399번을 풀어보자.
1. 탐욕 알고리즘 이란? Greedy algorithm 또는 탐욕 알고리즘 이라고 불리움 최적의 해에 가까운 값을 구하기 위해 사용됨 여러 경우 중 하나를 결정해야할 때마다, “매순간 최적”이라고 생각되는 경우를 선택하는 방식으로 진행해서, 최종적인 값을 구하는 방식
1. BFS 와 DFS 란? 대표적인 그래프 탐색 알고리즘- 너비 우선 탐색 (Breadth First Search): 정점들과 같은 레벨에 있는 노드들 (형제 노드들)을 먼저 탐색하는 방식- 깊이 우선 탐색 (Depth First Search): 정점의 자식들을 먼저 탐색하...
1. 그래프 (Graph) 란? 그래프는 실제 세계의 현상이나 사물을 정점(Vertex) 또는 노드(Node) 와 간선(Edge)로 표현하기 위해 사용
문제 백준 1920번을 풀어보자.
1. 순차 탐색 (Sequential Search) 이란? 탐색은 여러 데이터 중에서 원하는 데이터를 찾아내는 것을 의미 데이터가 담겨있는 리스트를 앞에서부터 하나씩 비교해서 원하는 데이터를 찾는 방법
1. 이진 탐색 (Binary Search) 이란? 탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방법
1. 병합 정렬 (merge sort) 재귀용법을 활용한 정렬 알고리즘 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 두 부분 리스트를 다시 하나의 정렬된 리...
1. 퀵 정렬 (quick sort) 이란? 정렬 알고리즘의 꽃 기준점(pivot 이라고 부름)을 정해서, 기준점보다 작은 데이터는 왼쪽(left), 큰 데이터는 오른쪽(right) 으로 모으는 함수를 작성함 각 왼쪽(left), 오른쪽(right)은 재귀용법을 사용해...
1. 정의 동적계획법 (DP) 입력 크기가 작은 부분 문제들을 해결한 후 ➡️ 해당 부분 문제의 해를 활용해서 ➡️ 보다 큰 크기의 부분 문제를 해결 ➡️ 최종적으로 전체 문제를 해결하는 알고리즘 상향식 접근법으로, 가장 최하위 해답을 구한 후 ➡️ 이를 저장하고 ➡️ 해...
1. 재귀 용법 (recursive call, 재귀 호출) 함수 안에서 동일한 함수를 호출하는 형태 여러 알고리즘 작성시 사용되므로, 익숙해져야 함
알고리즘 계산 복잡도는 다음 두 가지 척도로 표현될 수 있음- 시간 복잡도: 얼마나 빠르게 실행되는지- 공간 복잡도: 얼마나 많은 저장 공간이 필요한지
1. 선택 정렬 (selection sort) 란? 다음과 같은 순서를 반복하며 정렬하는 알고리즘 주어진 데이터 중, 최소값을 찾음 해당 최소값을 데이터 맨 앞에 위치한 값과 교체함 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 ...
1. 삽입 정렬 (insertion sort) 란? 삽입 정렬은 두 번째 인덱스부터 시작 해당 인덱스(key 값) 앞에 있는 데이터(B)부터 비교해서 key 값이 더 작으면, B값을 뒤 인덱스로 복사 이를 key 값이 더 큰 데이터를 만날때까지 반복, 그리고 큰 데이터...
들어가기 전에… 알고리즘을 효과적으로 공부하는 방법은 문제를 읽고 바로 코드를 작성하는 것이 아니라!
Question Given an integer array nums, move all the even integers at the beginning of the array followed by all the odd integers. Return any array that satis...
Question Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements. Note that you must do thi...
Question Given an array arr, replace every element in that array with the greatest element among the elements to its right, and replace the last element with...
Question Given an array of integers arr, return true if and only if it is a valid mountain array. Recall that arr is a mountain array if and only if: ...
Question Given an array arr of integers, check if there exists two integers N and M such that N is the double of M ( i.e. N = 2 * M). 리스트의 요소들 중에, (한 요소)*2를...
Question Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The rela...
Question Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The relative order of the elements may be changed. S...
Question You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in n...
Question Given a fixed-length integer array arr, duplicate each occurrence of zero, shifting the remaining elements to the right. Note that elements beyond t...
Question Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order. 리스트가 주어질 때...
Question Given an array nums of integers, return how many of them contain an even number of digits. 리스트가 주어질 때, 자리수가 짝수인 수의 개수를 구하는 문제였다.
Question Given a binary array nums, return the maximum number of consecutive 1’s in the array. 0과 1로 이루어진 리스트가 주어질 때, 연속된 1의 개수의 최대를 구하는 문제였다.
Promise란? 자바스크립트에서 제공하는 비동기를 간편하게 처리할 수 있도록 도와주는 오브젝트 비동기를 처리할 때 콜백함수 대신 Promise 사용 가능 🔔 State (상태) pending: 프로미스가 만들어져서 우리가 지정한 오퍼레이션을 수행중인 상태 fulfilled: 오페...
시작하기 앞서… javascript는 동기적이다. 즉, hoisting이 된 이후부터는 위에서부터 아래로 코드가 나타나는 순서대로 작동한다. hoisting: var 변수나 함수 선언들이 자동으로 제일 위로 올라가는 것
들어가기 앞서… async와 await은 깔끔하게 프로미스를 사용할 수 있는 방법 하지만 모든 프로미스를 async와 await으로 대체하라는 것은 아님!
Object to JSON stringify(obj) 배열을 json으로 변환 const fruits = ['apple', 'banana']; let json = JSON.stringify(fruits); console.log(json); // ["apple","banana"] ...
Literals and properties object는 key와 value의 집합체이다. object = {key : value}; ```js // object 생성 const obj1 = {}; // ‘object literal’ syntax const obj2 = new Ob...
Object와 자료구조의 차이점? 토끼와 당근이 있을 때 토끼와 당근 각각은 Object이다. 토끼: 눈, 코, 입, 뛴다, 먹는다 당근: 주황색, 비타민C 이렇듯 Object는 서로 연관된 특징과 행동을 묶어둔 것을 말함 토끼 여러마리 혹은 당근 여러개와 같이 비슷한 타입의 Ob...
🙂 배열 (Array) 1. 배열을 문자열로 변환 (join) 내 답 const fruits = ['apple', 'banana', 'orange']; let str = ''; for(let i=0; i<fruits.length; i++){ str += fruits[i...
💎 Function 💡 Parameters
Class와 Object 개념 정리 Class: template template: 해당 클래스에는 어떠한 데이터가 들어갈 수 있는지 템플릿만 정의해놓음 declare once: 한번만 선언 no data in: 정의만 한 것으로 실제 메모리에 올라가지 않음
String concatenation console.log('my' + 'cat'); console.log('1' + 2); // 12 (string)
💎 Data Type Mutable Data Type - let, rw(read/write) let은 변수 선언시에 사용한다. 더이상 Var 타입을 사용하면 안되는 이유 1. Var hoisting age = 4; var age; console.log(age); 위 코드에서 변수...
학습 배경 기존에 혼자서 진행하고 있던 프로젝트에서 백엔드 개발자를 한 분 더 모시게 되면서, 다양한 병합 방법에 대한 이야기가 나왔다. 혼자 개발할 때에는 고민해보지 않았던 부분이라 이번 기회에 공부를 하게 되었다.
1. PR 템플릿 만들기
상황 설명 우선 현재 로컬 디렉토리 구조를 보자. spring-cloud-gateway라는 폴더 안에 apigateway-service, first-service, second-service 세 개의 디렉토리가 있었다. (각각은 인텔리제이 프로젝트이다.) 그리고 이들은 git에 의...
.DS_Store를 제거하는 방법에 대해서는 이전에도 글을 올린 적 있었는데, 조금 다른 방법을 소개하려고 한다.
Git Branch 종류 Gitflow Workflow에서는 항상 유지되는 메인 브랜치들(master, develop)과 일정 기간 동안만 유지되는 보조 브랜치들(feature, release, hotfix)을 포함하여 총 5가지의 브랜치를 사용한다. 아래는 Gitflow Work...
상황 프로젝트를 깃허브 레포지토리에 push 했을 때, .DS_Store 파일까지 같이 올라간 상황
상황 commit message에 오타가 있는 줄 모르고 push까지 진행했다면?
.gitignore 이란? 프로젝트를 개발할 때 필요한 파일 이외의 불필요한 로그 파일들이 생성된다. .gitignore은 이러한 파일들을 git 관리 대상에서 제외하기 위해(commit에 포함하지 않도록) 규칙들을 저장한 파일이다.
📝branch
git remote git init git remote add origin "git주소" git status origin이라는 이름으로 원격 저장소 주소를 등록한다. 이제부터 origin이라는 이름을 사용하면 원격 저장소에 접속할 수 있다.
점수계산 문제 정리 입력 ``` 10 // n 0 1 0 0 1 0 1 1 0 0 // n문제의 채점 결과
주사위 게임 문제 정리 입력 3 // n 3 3 6 // 1번 사람의 주사위 눈 2 2 2 // 2번 사람의 주사위 눈 6 2 5 // 3(=n)번 사람의 주사위 눈 처리 과정 각 사람의 주사위 눈을 문자로 lst에 저장 정렬 (나중에 가장 큰 수 필요) 리스트에 있...
뒤집은 소수 문제 정리 입력 5 // n 32 55 62 3700 250 // n개의 자연수 처리 과정 reverse(x) 작성 x가 인자로 들어왔을 때 x의 일의 자리(t)를 떼어내기 그 일의 자리(t)를 이용한 reverse()의 핵심코드가 res = res*10+t...
소수 (에라토스테네스의 체) 문제 정리 입력 20 // n 처리 과정 리스트의 인덱스 번호를 n까지 생성 & 0으로 초기화 for문 돌면서 lst[i]가 0이면 cnt 1 증가 lst[]의 인덱스 중에 i의 배수들은 모두 1로 체크하기 2~3번 반복
자릿수의 합 문제 정리 입력 7 // n 137 460 603 40 521 128 125 // n개의 자연수 처리 과정 각 자리수를 더하는 digit_sum() 작성 lst의 요소를 digit_sum()의 인자로 전달하면서 반환값 누적 tot의 max 구하기 ls...
정다면체 문제 정리 입력 4 6 // n m 처리 과정 0으로 초기화된 카운트 리스트 생성 리스트의 길이는 n+m+3 (두 주사위의 눈의 합이 카운트 리스트의 인덱스가 되기 때문에 n+m을 넘지 않지만 +3은 여유롭게!) cnt에서 max 찾기 cnt에서 값이 m...
대표값 문제 정리 입력 15 // n 12 34 17 6 11 15 27 42 39 31 25 36 35 25 17 // n개의 수
K 번째 큰 수 문제 정리 입력 10 3 // n, k 18 54 46 52 28 22 23 53 28 40 // 요소가 n개인 리스트
K 번째 수 문제 정리 입력 2 // 테스트 케이스 수 (T) 6 2 5 3 // N s e k 5 2 7 3 8 9 // N개의 숫자로 이루어진 수열 15 3 10 3 // N s e k 4 15 8 16 6 6 17 3 10 11 18 7 14 7 15 // N개의 숫자로 이루...
K 번째 수 문제 정리 입력 6 3 // n k 처리 과정 n의 약수들 중 k번째로 작은 수 출력 출력 3
JWT란 JSON 객체를 사용해서 토큰 자체에 정보를 저장하는 web token입니다.
Docker Compose란? Docker Compose는 여러 개의 컨테이너(container)로 구성된 애플리케이션을 관리하기 위한 도구이다. Docker Compose 관련 명렁어 아래 명령어를 터미널에 입력한다. up docker-compose up -d Docker Co...
들어가기 전에… MacOS) m1 환경에서 설치를 진행합니다. Docker 설치하기 아래 사이트에서 도커를 다운로드한다. Docker m1 릴리즈 다운
node에서 테스트를 위해 사용하는 세가지 라이브러리 mocha mocha는 테스트 코드를 돌려주는 테스트 러너 테스트 수트: 테스트 환경으로 모카에서는 describe()로 구현한다. 테스트 케이스: 실제 테스트를 말하며 모카에서는 it()으로 구현한다.
들어가기 전에… mock function이란 테스트 하기 위해 흉내만 내는 가짜 함수이다. mock function이 필요한 이유? user db에 접근해서 user list를 select 해오는 작업이 필요하다고 가정했을 때, 작성해야할 코드가 상당히 많아짐 외부 요인(...
TDD란? 개념 테스트 주도 개발: 테스트가 개발을 이끌어 나간다. 즉, 테스트를 먼저 작성한 뒤에 테스트를 통과하기 위한 코드를 짜는 것이다. 왜 TEST를 해야할까? 테스트를 함으로써 더욱 안정적인 어플리케이션을 만들 수 있고 재설계 및 기능 추가 시 용이하다.
문제 상황 예시 - 1 테스트 코드 작성 fn.test.js ```js const fn = require(“./fn”);
callback 비동기 코드 작성 fn.js const fn = { getName:(callback) => { const name="Mike"; setTimeout(()=>{ callback(name); }, 3000) }, // ...
값이 같은지(근사치인지) 판단하는 테스트 fn.js const fn = { add: (a,b) => a+b, makeUser: (name,age) => ({name,age,gender:undefined}) }; module.exports = fn; fn.test...
EC2 인스턴스는 미리 생성해둔 상태이다. AWS EC2 ubuntu 20.04
EC2 인스턴스에 redis-server가 이미 설치되어 있다는 가정하에 진행한다. 1. Redis Config 설정 redis.conf 파일 열기 ssh 명령어를 이용해 인스턴스에 연결한 뒤 아래 명령어를 실행한다. sudo vi /etc/redis/redis.conf redi...
EC2 인스턴스는 이미 생성되어 있다는 가정하에 진행한다. EC2 인스턴스에 redis-server 설치 1) apt-get 업그레이드 sudo apt-get update sudo apt-get upgrade 2) redis-server 설치 sudo apt-get install...
EC2 인스턴스에 mysql-server가 이미 설치되어 있다는 가정하에 진행한다.
EC2 인스턴스는 이미 생성되어 있다는 가정하에 진행한다. 1. EC2 인스턴스에 mysql-server 설치 ssh 명령어를 이용해 인스턴스에 연결한 뒤 아래 명령어를 실행한다. sudo apt-get install -y mysql-server 이때, 8.0 버전을 설치해야한...
이전에 생성했던 EC2 인스턴스에 접속하여 진행한다. 1. git clone 하기 프로젝트와 연결된 github 주소에서 git clone을 통해 소스코드를 받아온다. 내 소스코드는 master가 아니라 branch에 있기 때문에 아래 명령어를 입력했다. git clone -b [...
Mac M1 환경에서 진행한다. 1. EC2 인스턴스 생성 AWS에 로그인 AWS에 로그인하여 좌측 상단의 EC2를 클릭한다.
최대힙 최대힙은 완전이진트리로 구현된 자료구조이며, 부모노드값이 왼쪽 자식과 오른쪽 자식노드의 값보다 크게 구성된다. 따라서 루트노트에는 입력된 값들 중 가장 큰 값이 저장되어 있다.
최소힙 최소힙은 완전이진트리로 구현된 자료구조이며, 부모노드값이 왼쪽 자식과 오른쪽 자식노드의 값보다 작게 구성된다. 따라서 루트노트에는 입력된 값들 중 가장 작은 값이 저장되어 있다. +) 루트노드의 값을 pop 하고 -> 최하위 레벨의 제일 오른쪽 요소를 루트에 올리...
아나그램 문제 정리 입력 AbaAeCe baeeACA 처리 과정 한 개의 딕셔너리 생성 (key: 알파벳, value: 개수) 입력받은 첫번째 스트링(str1)을 돌며 딕셔너리에 +1 입력받은 두번째 스트링(str2)을 돌며 딕셔너리에서 -1 딕셔너리에서 str1...
단어찾기 문제 정리 입력 5 big good sky blue mouse sky good mouse big 처리 과정 미리 노트에 적은 단어를 딕셔너리에서 1로 체크 실제 시에 사용된 단어를 딕셔너리에서 0으로 변경 딕셔너리의 value가 1인 요소의 key를 출력
교육과정설계 문제 정리 입력 CBA 3 CBDAGE FGCDAB CTSBDEA 처리 과정 수강과목 요소를 하나씩 돌면서… 해당 요소가 필수과목 큐에 포함되어 있는데 필수과목 큐에서 pop한 요소와 다르다면 NO & break 2번에서 break 당하지 않았으며...
응급실 문제 정리 입력 6 0 60 60 90 60 60 60 처리 과정 환자 리스트를 튜플 형태로 받기 리스트를 큐로 변경 큐에서 환자(cur)를 pop() 했을 때, 큐 안에 있는 다른 환자들 중에 현재 환자(cur)보다 위험도가 높은 환자가 있다면 현재 환자(c...
공주 구하기 문제 정리 입력 8 3 처리 과정 k번째 수를 외치는 사람은 제외된다고 하면, k-1번째까지 외치는 사람은 통과 k-1번째 까지는 popleft() 하고 큐의 뒤쪽으로 append() k번째 수를 외치는 사람은 뒤에 붙이지 않고 popleft()만! ...
쇠막대기 문제 정리 입력 ()(((()())(())()))(()) 처리 과정 입력을 스트링 변수(str)에 받기 빈 스택 리스트를 생성 여는 괄호를 만나면 무조건 스택에 넣기 닫는 괄호를 만났을 때에는 두가지 경우가 있음 str에서 해당 닫는 괄호 바로 이전 ...
가장 큰 수 문제 정리 입력 5276823 3 // n m 처리 과정 int형인 n을 int 리스트로 변경 while문 돌면서 스택의 맨 마지막 요소가 나보다 작으면 pop() & m-=1 뺄거 다 뺐으면 내가 들어가기: stack.append(x) 총 m...
이 글과 이 글을 참고했다.
나중에 mysql과 redis에 볼륨 설정을 추가로 해야한다! 일단 배포부터 진행해보자. (원래 aws ec2 ubuntu를 사용하려고 했는데, 자꾸 중단되는 문제가 발생해 gcp centos7를 사용했다. 따라서 0번은 필요 없지만, 나중에 참고하기 위해 남겨두었다.)
IntelliJ build.gradle ``` dependencies { …
volume 생성 ec2 인스턴스에 접속하여 실행한다. ```bash volume 생성 $ docker volume create mysql-volume
.env 파일 정의 MYSQL_USERNAME=root MYSQL_PASSWORD=test123
1. git clone $ git clone https://github.com/minju412/docker-test.git
이 글을 참고했다.
1. jar 파일 준비 bootJar 빌드 인텔리제이 우측 상단에 Gradle 탭 > Tasks > build > bootJar 를 마우스 우클릭 하여 Run 한다.
1. 힙 (Heap) 이란? 힙: 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree)- 완전 이진 트리: 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 힙을 사용하는 이유- 배열에 데이터를 넣고, 최...
1. 트리 (Tree) 구조 트리: Node와 Branch를 이용해서, 사이클을 이루지 않도록 구성한 데이터 구조 실제로 어디에 많이 사용되나?- 트리 중 이진 트리 (Binary Tree) 형태의 구조로, 탐색(검색) 알고리즘 구현을 위해 많이 사용됨
1. 해쉬 구조 Hash Table: 키(Key)에 데이터(Value)를 저장하는 데이터 구조- Key를 통해 바로 데이터를 받아올 수 있으므로, 속도가 획기적으로 빨라짐- 파이썬 딕셔너리(Dictionary) 타입이 해쉬 테이블의 예: Key를 가지고 바로 데이터(Value...
1. 알고리즘 복잡도 계산이 필요한 이유 하나의 문제를 푸는 알고리즘은 다양할 수 있음 정수의 절대값 구하기- 방법1: 정수값을 제곱한 값에 다시 루트를 씌우기- 방법2: 정수가 음수인지 확인해서, 음수일 때만, -1을 곱하기
1. 링크드 리스트 (Linked List) 구조 연결 리스트라고도 함 배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조 링크드 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조 본래 C언어에서는 주요한 데이터 구조이지만, ...
1. 스택의 구조 스택은 LIFO(Last In, Fisrt Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따름- LIFO: 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책 - FILO: 처음에 넣은 데이터를 가장 마지막에 추출하는...
1. 큐의 구조 줄을 서는 행위와 유사 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조- 음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일- FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방...
1. 배열이란? 데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조 파이썬에서는 리스트 타입이 배열 기능을 제공함
데이터베이스 확인 및 생성
mysql 설정파일 검색 mysqld --verbose --help | grep -A 1 'Default options' 나는 bind-address 정보가 세 번째 파일인 /opt/homebrew/etc/my.cnf에 있었다.
1. config/config.js 코드 변경 ```js const dotenv = require(‘dotenv’); dotenv.config();
예제 하나의 프로젝트는 여러개의 키워드를 추가(add)할 수 있다. 하나의 키워드는 여러 프로젝트에 속해있을(added) 수 있다. 이때, project와 keyword는 N:M 관계이며 이를 데이터베이스 상에서 표현하기 위해 through table을 사용한다.
Mandatory : Optional 저자 - 댓글 저자는 댓글을 작성하지 않을수도 있다. 각 댓글은 반드시 저자가 있다. 이때, Mandatory와 Optional의 관계는 다음과 같이 표현한다. 저자 - 댓글의 cardinality는 1:N이므로 optionality와 c...
1:1 관계 담임선생님 - 반 각 선생님은 한 반만 담임한다. 각 반의 담임은 한명이다.
격자판 최대합 문제 정리 입력 5 10 13 10 12 15 12 39 30 23 11 11 25 50 53 15 19 27 29 37 27 19 13 30 13 19 처리 과정 하나의 for문 안에서 행과 열의 최대합을 한번에 구하기 또다른 for문 안에서 두 대각선의...
수들의 합 문제 정리 입력 8 3 1 2 1 3 1 1 1 2 처리 과정 두개의 포인터 변수(p1,p2) 초기화 p1=0 p2=1 tot: lst[p1]부터 lst[p2] “이전”까지의 합 tot<m tot==m tot>m으로 경우의 수 나눠서 작성 t...
두 리스트 합치기 문제 정리 입력 10 1 10 27 39 50 61 65 70 93 93 7 7 51 65 66 70 82 93 처리 과정 포인터 변수 초기화 빈 리스트 생성 p1이 n이 되거나 p2가 m이 되면 while문 종료 lst_1과 lst_2의 각...
카드 역배치 문제 정리 입력 5 10 9 13 1 2 3 4 5 6 1 2 3 4 5 6 1 20 1 20 처리 과정 카드 리스트 생성 구간의 src와 dest를 입력받기 주어진 구간에서 위치가 대칭인 두 수를 swap 카드 리스트는 인덱스 0부터 인덱스 20까지...
숫자만 추출 문제 정리 입력 kdk1k0kdjfkj0kkdjkfj0fkd 처리 과정 스트링을 돌아가면서 숫자만 추출 약수의 개수 구하는 함수 작성 1번의 결과값을 2번 함수에 전달
회문 문자열 검사 문제 정리 입력 ``` 5 // n level // 1번째 단어 moon // 2번째 단어 abcba // 3번째 단어 soon // 4번째 단어 gooG // 5(=n)번째 단어
씨름 선수 문제 정리 입력 5 // n 172 67 // 1번째 선수: 키 몸무게 183 65 // 2번째 선수: 키 몸무게 180 70 // 3번째 선수: 키 몸무게 170 72 // 4번째 선수: 키 몸무게 181 60 // 5(=n)번째 선수: 키 몸무게 처리 과정 선...
회의실 배정 문제 정리 입력 5 // n 1 4 //1번째 회의: 시작 종료 2 3 //2번째 회의: 시작 종료 3 5 //3번째 회의: 시작 종료 4 6 //4번째 회의: 시작 종료 5 7 //5(=n)번째 회의: 시작 종료 처리 과정 튜플 형태로 회의 시간 입력받기 ...
랜선 자르기 문제 정리 입력 4 11 // k n 802 // 1번째 랜선 743 // 2번째 랜선 457 // 3번째 랜선 539 // 4(=k)번째 랜선 처리 과정 랜선 리스트에서 가장 긴 랜선의 길이 구하기 길이가 len인 랜선으로 잘랐을 때 몇개 나오는지 확인하는...
이분검색 문제 정리 입력 8 32 // n m 23 87 65 12 57 32 99 81 // 요소가 n개인 리스트 처리 과정 리스트 오름차순 정렬 리스트의 양 끝 요소를 가리키는 두 개의 포인터(p1,p2) 설정 (p1+p2)//2인 mid 설정 lst[mid]...
이전 글에 젠킨스 서버 설정을 마쳤다. 이제 배포 서버 설정을 해보자.
GCP 프로젝트 생성부터 jenkins 설치까지는 이전 글에서 다뤘다. 우선, 이전에 만든 jenkins 인스턴스에서 [유사하게 만들기]로 web 인스턴스를 생성하자. 생성 후에는 외부 고정 IP도 할당하자. (기존에 있던 instance-1은 ubuntu 였으므로 일단 중지해놓자...
GCP 프로젝트 생성부터 jenkins 설치까지는 이전 글에서 다뤘다. 우선, 이전에 만든 jenkins 인스턴스에서 [유사하게 만들기]로 web 인스턴스를 생성하자. 생성 후에는 외부 고정 IP도 할당하자. (기존에 있던 instance-1은 ubuntu 였으므로 일단 중지해놓자...
서버를 배포하던 중, AWS 프리티어의 사양이 부족해 원활하게 수행되지 않는 문제가 발생했다. 같은 문제가 발생했다는 글도 발견했다. 따라서 GCP를 이용해보려고 한다. 구글 클라우드에 가입하는 법은 이 글을 참고하자.
1. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (Level 3) 문제
1. COUNT COUNT(*) 으로 존재하는 모든 행을 가져올 수 있다 만약 * 대신 COUNT(NAME)과 같이 사용한다면, NAME 컬럼에 NULL이 들어있지 않은 행 갯수를 가져온다
1. 가장 비싼 상품 구하기 (Level 1) 문제
DB (Database) 전자적으로(electronically) 저장되고 사용되는 관련있는(related) 데이터들의 조직화된 집함(organized collection)
문제 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 ...
문제 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같...
문제 1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
Oracle 설치 (with Colima)
⛅ 시작하기 앞서
🌟 코드 실행은 cmd+enter 으로 한다.
1. H2 다운 반드시 v 1.4.200 버전을 받아야 한다! https://www.h2database.com/html/download-archive.html
1. redis image 다운로드 docker pull redis:alpine alpine 은 태그를 의미하며 redis의 버전 등의 값을 줄수 있다. 이를 생략하면 latest를 받는데, alpine 태그의 특징은 이미지를 경량화 시켜서 용량이 작다는 것이다.
connect-redis 설치하기 npm i connect-redis 만약 redis와 express-session이 설치되어있지 않다면… npm install redis connect-redis express-session
1. nginx 설치하기 ec2 인스턴스(ubuntu)에 접속한 뒤에 sudo apt-get install nginx
1. 도메인 만들기 freenom freenom은 무료 도메인을 제공하는데 일반적인 도메인(.com)이 아닌 .cf나 .ga 같은 잘 사용하지 않는 도메인을 제공한다. 연습용으로 사용하기에는 무료 도메인도 충분하지만, 주의사항은 여기서 알아두자! (참고로, 고대디 혹은 가비아와 ...
문제 길이가 n인 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는지를 확인하려고 합니다. 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요.
코딩테스트 데모 예제로 나왔던 문제이다.
@Enumerated
JPA에서 Entity 객체를 정의할 때 @Id 속성을 함께 정의해야 한다. Id를 정의할 때 “직접 할당하는 방법”과 “데이터베이스가 자동으로 할당해주는 방법”이 있다.
개발 블로그를 둘러보다가 우연히 쟈미님의 devlog를 보게 되었다. 현재는 카카오 백엔드 개발자로 일하고 계신데, 취준생 때의 글을 보니 지금부터라도 많은 노력이 필요함을 깨달았다.
ddd
jojoldu님의 블로그를 참고하여 공부하였습니다🙂
보안의 3대 요소
HashMap 선언 ```java import java.util.HashMap; // ✅
ddd