[프로그래머스 / MySQL] 연도별 대장균 크기의 편차 구하기 (Lv2 - 셀프조인, 윈도우 함수)
·
코딩테스트/프로그래머스 SQL
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/299310 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 셀프 조인을 이용한 방법select year(e1.DIFFERENTIATION_DATE) as YEAR, e2.mx_size - e1.SIZE_OF_COLONY as YEAR_DEV, e1.IDfrom ECOLI_DATA e1join ( select year(DIFFERENTIATION_DATE) as year, max(SIZE_OF_COLONY) as mx_size from ECOLI_DATA gro..
[Spring 5] Spring MVC, DispatcherServlet
·
프로젝트/Spring
1. MVC 패턴MVC(Model-View-Controller) 패턴은 사용자 요청을 처리하는 로직을 Model, View, Controller로 분리한다. 이를 통해 컴포넌트간 결합도를 낮추고, 특정 컴포넌트의 변경이 다른 컴포넌트에 영향을 주지 않도록 한다. 사용자 화면을 비즈니스 로직과 분리하므로, 기능 확장 및 변경이 편리해진다. Model은 애플리케이션의 상태(애플리케이션이 현재 가지고 있는 데이터)를 나타내며, 비즈니스 로직을 수행한다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다.View는 모델이 보유한 정보를 화면에 시각적으로 나타낸다. 꼭 HTML만이 아니라 JSON, XML 등을 표시하는 것도 View로 본다.Controller는 데이터와 비즈니스 로직 사이의 상호 동작..
[Spring 5] REST API, RESTful API 이름 짓기
·
프로젝트/Spring
1. API와 REST APIAPI(Applicaation Programming Interface)는 서로 다른 소프트웨어 프로그램끼리 서로 소통하고 데이터를 주고받기 위해 설정한 규약, 약속이다. API를 활용하면 사용자는 내부 로직을 볼 수 없고 결과만 볼 수 있기 때문에 보안적으로도 안전하고 결과값만 조회 할 수 있어 효율적이다. 또한 java든 python이든 다른 언어나 환경에 관계없이 다양한 시스템을 연결할 수 있다는 장점이 있다. REST API(Represetational State Transfer API)는 웹에서 데이터를 주고 받기 위한 아키텍쳐 스타일이다. 특정 기술을 말하는 단어가 아니고, 데이터를 어떻게 바라보고 어떤 주소로 보낼지를 지정하는 방법론에 가깝다고 할 수 있다. RES..
[Spring 5] 프로젝트 관리 도구 - Maven
·
프로젝트/Spring
1. Maven에 대하여Maven은 프로젝트 관리를 위한 도구로 프로젝트 생성, 배포, 리포팅까지 전체 과정을 도와준다. Maven 이전에는 Ant라는 빌드 도구가 있었는데 라이브러리에 대한 의존성 관리가 불편했다. Maven은 라이브러리에 대한 의존성 관리를 자동으로 해주는 편리함이 있다. 또한 정해진 프로젝트 폴더 구조를 따르게 하는 등 편리한 점들이 있다. 하나하나 Maven에 대해 살펴보자 1. POM (Project Object Model)IntelliJ에서 Maven을 선택해서 프로젝트를 생성하면 `pom.xml` 파일이 자동으로 생성된다. 이 XML 파일은 프로젝트 이름, 버전, 필요한 외부 라이브러리, 빌드 설정 등을 기술해주는 파일이다. Maven은 이 pom.xml을 읽어서 프로젝트 구..
[Spring 5] 제어의 역전(IoC), 의존성 주입(DI)
·
프로젝트/Spring
1. 제어의 역전 (IoC: Inversion of Control)일반적인 객체지향 프로그래밍 방식에서는 개발자가 직접 객체를 사용하는 시점에 객체를 생성해서 사용한다. 즉 객체에 대한 제어권이 개발자에게 있었다. 하지만 소스코드 상에서 하드코딩한 객체의 생성 구현은 객체간의 의존성을 높이게 된다. 직접적인 객체 생성으로 인해 결합도가 높아지게 된다.public class ClubServiceLogic implements ClubService { private ClubStore clubStore; public ClubServiceLogic() { this.clubStore = new ClubMapStore(); }}위 코드가 전통적인 방식이다. 개발자가 생성자에서 다른 객체를..
[Java] 8. 람다함수, 함수형 프로그래밍, Stream API
·
프로젝트/Java
1. 람다함수Java 8에서 가장 큰 변화는 람다함수, 함수형 프로그래밍의 적용, Stream API의 등장이다. 이런 변화의 중심에는 인터페이스의 변경이 있었고, 이를 토대로 함수형 프로그래밍과 Stream API가 등장할 수 있었다. 먼저 람다함수에 대해 알아보자. 람다표현식의 등장은 불필요한 코드를 줄이고, 코드의 이해를 돕는다. 람다 표현식은 메소드로 전달할 수 있는 익명 함수를 단순화한 코드 블럭이다. 람다 표현식은 특정 클래스에 종속되지 않으며 함수라는 이름으로 명명한다. 함수 자체를 전달 인자로 보내거나 변수에 저장하는 것이 가능하다. 람다 함수의 문법은 아래와 같다.// 기존 방식 (익명 클래스)new Comparator() { @Override public int compa..
[BOJ / C++] 최단경로 (골드4 - 다익스트라)
·
코딩테스트/BOJ
문제링크: https://www.acmicpc.net/problem/1753 1. 코드#include using namespace std;const int INF = (INT_MAX / 2) - 1;int main() { ios::sync_with_stdio(0); cin.tie(0); int v, e, st; cin >> v >> e; cin >> st; // {거리, 정점번호} vector>> adj(v+1); vector d(v+1, INF); for (int i = 0; i > u >> v >> w; adj[u].push_back({w, v}); } priority_queue, vector>, greater>> pq; d..
[Java] 7. Wrapper 클래스, Collection 프레임워크
·
프로젝트/Java
1. Wrapper 클래스 (오토 박싱, 오토 언박싱)자바에서 데이터 기본 단위는 객체이다. int, double과 같은 primitive type도 객체로 관리할 수 있도록 하는 것이 좋고, 이를 도와주는 클래스가 Wrapper 클래스이다.`int` → `Integer`, `long` → `Long`, `float` →`Float`, `double` → `Double`,`char` → `Character`, `boolean` → `Boolean`* Collection 프레임워크에는 반드시 객체가 들어가야한다. 즉, primitive type을 쓸 수 없고 Wrapper 클래스로 감싸 들어가야한다. Wrapper 클래스는 클래스이기 때문에 원래는 생성과 대입이 어렵지만, 자바에서는 오토 박싱, 오토 ..
[BOJ / C++] 우주 탐사선 (골드3 - 플로이드, 백트래킹, 람다함수)
·
코딩테스트/BOJ
문제링크: https://www.acmicpc.net/problem/17182 1. 코드#include using namespace std;int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; vector> d(n+1, vector(n+1, 0)); for (int i = 0; i > d[i][j]; } } for (int k = 0; k vis(n, false); vis[k] = true; function dfs = [&](int cur, int cost, int cnt) { if (cnt == n) { minTime = m..
[Java] 6. 예외처리
·
프로젝트/Java
1. 자바 예외(Exception)의 구조자바에서는 발생하는 문제를 객체로 관리한다. 크게 `Error`와 `Exception`으로 나뉜다.구분설명특징Error메모리 부족(OOM) 등 시스템 수준의 문제복구 불가능, 프로그램 종료Exception로직 상의 오류나 외부 요인 (파일 없음 등)예외 처리(Handling)를 통해 복구 가능 [Checked Exception과 Unchecked Exception]Checked Exception: 컴파일 시점에 체크하며, 반드시 try-catch나 throws가 필요하다. 예외처리를 강제한다. (e.g. IOException)Unchecked Exception: RuntimeException을 상속받으며, 실행 시점에 확인한다. 예외처리를 강제하지는 않는다.(예..
[프로그래머스 / MySQL] 가격이 제일 비싼 식품의 정보 출력하기 (Lv2 - MAX)
·
코딩테스트/프로그래머스 SQL
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/131115 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 코드[방법 1: 야매]select *from FOOD_PRODUCT porder by p.price desclimit 1; [방법 2: 정석]select *from FOOD_PRODUCT p1where p1.price = ( select max(p2.price) from FOOD_PRODUCT p2) 2. 분석특정 attribute가 최댓값이 되는 행을 조회하는 방법은 크게 두가지가 있다.1. 해당 열을 내림차순 정렬 후..
[Docker] Dockerfile 작성하기
·
프로젝트/Docker
1. Dockerfile이란?도커파일 문서: https://docs.docker.com/reference/dockerfile/ Dockerfile referenceFind all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.docs.docker.com Dockerfile은 도커 이미지를 생성하기위한 스크립트 파일이다. 텍스트 파일 안에 키워드를 사용해 환경 설정 및 실행 명령을 작성하면, 도커 엔진이 이를 읽어 이미지를 자동으로 빌드한다.2. Dockerfile의 키워드 정리키워드설명`FROM`base가 되는 image를 지정한다. 주..
[BOJ / C++] 가운데에서 만나기 (골드4 - 플로이드)
·
코딩테스트/BOJ
문제링크: https://www.acmicpc.net/problem/21940 1. 코드#include using namespace std;const int INF = (INT_MAX / 2) - 1;int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector> d(n+1, vector(n+1, INF)); for (int i = 1; i > a >> b >> time; d[a][b] = min(d[a][b], time); } int k; cin >> k; vector cityList(k); for (int i = 0; i > cityList[i];..
[BOJ / C++] 서강그라운드 (골드4 - 플로이드)
·
코딩테스트/BOJ
문제링크: https://www.acmicpc.net/problem/14938 1. 코드#include using namespace std;const int INF = (INT_MAX / 2) - 1;int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m, r; cin >> n >> m >> r; vector item(n+1); for (int i = 1; i > item[i]; } vector> d(n+1, vector(n+1, INF)); for (int i = 1; i > a >> b >> len; d[a][b] = min(d[a][b], len); d[b..
[프로그래머스 / MySQL] 서울에 위치한 식당 목록 출력하기 (Lv4 - LIKE)
·
코딩테스트/프로그래머스 SQL
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/131118 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 코드select ri.rest_id, ri.rest_name, ri.food_type, ri.favorites, ri.address, round(avg(rr.review_score), 2) as scorefrom REST_INFO rijoin REST_REVIEW rr on rr.rest_id = ri.rest_idwhere ri.address like '서울%'group by ri.rest..
[Docker] 도커 컨테이너 통신 (포트포워딩)
·
프로젝트/Docker
1. 도커 컨테이너 통신 (포트 포워딩)도커 컨테이너는 가상 네트워크 내부에 존재한다. 외부망(인터넷)에서 접속하려면 컨테이너의 주소를 알아야하는데 컨테이너의 주소는 내부망에 위치하므로 알 수 없다. 외부에서 컨테이너의 주소(내부 IP)를 직접 알 수 없으므로 포트포워딩이 필요하다. 포트포워딩에 대해서는 [네트워크]에서 설명해두었다. [네트워크] 04. VBox 가상 네트워킹1. 공인 IP(외부망)와 사설IP(사설망 또는 내부망)[용어 정리]외부망(Internet, Public Network): 전 세계적으로 라우팅되는 공용 네트워크, 공인 IP 대역을 사용한다.내부망(Internal Network, LAN): 공유기 뒤편sophon.tistory.com 이런 식으로 외부망의 8080 포트를 내부망의 ..
[Docker] 도커 컨테이너 구조, 도커 명령어
·
프로젝트/Docker
1. 도커 컨테이너 레이어 구조 이미지 레이어 (Read-Only): 도커 허브에서 내려받은 이미지는 수정이 불가능한 읽기 전용 상태.컨테이너 레이어 (Read/Write): 이미지를 기반으로 컨테이너를 실행하면 그 위에 쓰기 가능한 레이어가 한 층 더 쌓인다.데이터의 저장: 우리가 컨테이너 안에서 파일을 만들거나 설정을 바꿔도 실제 이미지는 변하지 않는다. 모든 변경 사항은 가장 위의 컨테이너 레이어에만 저장되기 때문이다. [이미지와 컨테이너 비교]이미지는 클래스(Class), 컨테이너는 인스턴스(Instance)에 비유해서 생각해보면 된다.이미지는 애플리케이션을 실행하기 위한 모든 환경이 응축된 그 실행 당시의 스냅샷이다.컨테이너는 그 이미지를 실행(run)할 때 메모리에 독립적인 공간이 할당되어 동..
[Docker] 도커는 무엇인가?
·
프로젝트/Docker
1. Docker 란?Docker: 애플리케이션을 컨테이너라는 표준화된 유닛으로 패키징하여 어디서든 동일하게 실행할 수 있도록 돕는 오픈소스 가상화 플랫폼 [도커의 사용 목적]환경의 표준화: 개발, 테스트, 운영 환경을 일치시켜 환경 차이로 인한 오류를 방지한다.배포의 신속성: 코드뿐만 아니라 라이브러리, 설정파일 등을 이미지로 만들어 빠르게 배포하고 확장할 수 있다.자원 효율성: 필요한 시스템 자원만 사용하여 가볍고 빠르게 구동함.2. 가상머신(VM) vs 도커(Docker) 가상머신 (VM)도커 (Docker)구조호스트 OS 위에 게스트 OS를 각각 설치호스트 OS의 커널을 공유자원 사용게스트 OS 실행을 위한 오버헤드 발생 (무거움)매우 가볍고 적은 메모리 사용부팅 속도OS 부팅 필요 (분 단위..
[Java] 5. 문자열 (String, StringBuilder, StringBuffer), 자바 표준 입출력
·
프로젝트/Java
1. 문자열 (String, StringBuilder, StringBuffer)1. String 클래스String은 기본 타입이 아닌 참조 타입의 객체이다.Immutability: 한 번 생성된 String 객체의 내용은 바꿀 수 없다. `concat()`, `replace`를 써도 새로운 String 객체가 생성되는 것이다.String Pool: 메모리 절약을 위해 자바는 동일한 문자열 리터럴을 공유해서 사용한다.[String 메소드]equals(): 문자열의 내용이 같은지 비교 (==은 주소값을 비교함)substring(start, end): 특정 범위의 문자열을 추출indexOf(str): 특정 문자가 시작되는 위치(인덱스)를 반환trim() / strip(): 앞뒤 공백 제거 (유니코드까지 인식하..
[이해인 - 작은 노래 2] 넓은 하늘로의 비상을 꿈꾸며
·
🌱 잡담/좋은 시 모음
1. 전문작은 노래 2- 이해인어느 날 비로소큰 숲을 이루게 될 묘목들넓은 하늘로의 비상을 꿈꾸며갓 태어난 어린 새들어른이 되기엔 아직도 먼눈이 맑은 어린이한 편의 시가 되기 위해내 안에민들레처럼 날아다니는조그만 이야기들더 높은 사랑에 이르기 위해선누구도 어쩔 수 없는조그만 슬픔과 괴로움목표에 도달하기 전완성되기 이전의 작은 것들은늘 순수하고 겸허해서마음이 끌리는 것일까크지 않다는 이유만으로도눈물이 날 만큼 아름다운 것들의숨은 힘을 사랑하며날마다 새롭게착해지고 싶다.풀잎처럼 내 안에 흔들리는 조그만 생각들을 쓰다듬으며욕심과 미움을 모르는작은 사람들이 많이 사는행복한 나라를 꿈꾸어본다작은 것을 아끼고 그리워하는 마음을보이지 않게 심어주신나의 하느님을 생각한다.내게 처음으로 작은 미소를 건네며작은 것의 소중..