전체 글

개발 블로그 💻👩‍💻
아래 글은 토비의 스프링을 읽고 공부하였습니다. 목차 1. IoC란 1) 팩토리 2) IOC(제어의 역전) 3) 프레임워크와 라이브러리 2. 스프링의 IoC 1) Bean과 Bean Factory 2) 애플리케이션 컨텍스트와 동작방식 3) 직접 만든 애플리케이션 컨텍스트와 object factory의 차이점 3. 싱글톤 1) 싱글톤으로 만드는 이유 2) 싱글톤 패턴의 한계 3) 싱글톤 레지스트리 4) 싱글톤 사용 시 주의할 점 1. 오브젝트 팩토리 1. 팩토리 앞에서 우리는 UserDaoTest에 DB 연결에 대한 책임(ConnectionMaker 구현 클래스)을 던져버렸다. 이번에는 이 책임을 DaoFactory로 분리해보자. public class DaoFactory { public UserDao u..
아래 글은 토비의 스프링을 읽고 공부하였습니다. 목차 1. DAO 1) DAO vs DTO 2) DAO-관심사의 분리 2. DAO의 분리 1) 클래스의 분리 2) Interface의 도입 3) 관계설정 책임의 분리 2. 원칙과 패턴 1) 개방 폐쇄 원칙 2) 전략 패턴 1. DAO 1. DAO vs DTO DAO에 대해 파악하기 위해 우리가 개발할 때 많이 사용하는 DTO 개념과 비교해보자! DTO는 데이터를 운반하기 위한 틀이라면, class Person { private String name; private int age; } DAO는 data에 접근하기 위한 객체로, DB 접근에 대한 로직과 비즈니스 로직(Service, Controller, Repository)을 분리하기 위해 사용한다. 사실 지..
개요 회사의 빅데이터 장비 시스템( Linux+GPU+Docker ) 서버의 metric data를 쌓고 관리하기 위해 모니터링 툴을 도입하는 과제를 부여받았다! 서버 내에 ES 에 클러스터 5개가 docker와 NVIDIA GPU를 사용하여 운영되고 있었고, ELK Stack(ES + Kibana + Logstash)를 이용해 Filebeat가 이미 운용되고 있는 환경이었다. 모니터링 기술 선택 고민 모니터링 기술로 크게 두 가지 스택을 논의하였다. 1. Grafana + Prometeus 2. MetricBeat(ELK) ✅ 두 스택을 비교하자면 프로메테우스+Grafana는 Metric data(서버의 상태를 측정한 항목이나 지표) 모니터링 및 시각화에, ELK 스택은 로그 데이터의 수집, 분석 및 ..
FOSSLIGHT Fosslight는 LG전자에서 자체 개발하여 사용하고 있는 오픈소스 관리 통합 시스템을 누구나 사용할 수 있도록 2021년 오픈소스로 공개한 프로젝트이다. 매년 oss에서 오픈소스 컨트리뷰션을 통해 자체적으로 멘토와 멘티를 선발하고 있으며 좋은 기회에 참여할 수 있게 되었다. FOSSLight FOSSLight으로 완성하는 Open Source Governance fosslight.org 이슈 내용 ISSUE - #817 Project List, 3rd Party List > Add watcher search PR - Added watcher search box in Project List, 3rd Party List 내가 맡았던 이슈는 위의 사진처럼 검색을 할 때 Watcher 값도..
· 협업도구
문제상황 3주 전에 하던 GIT 작업을 다시 진행하던 도중 remote의 상황이 바뀌었다. 이후 merge 이후 PR을 올리니 다른 사람들이 했던 커밋들이 모두 commit history에 쌓이는 모두 반영되는 불상사가 벌어지고 말았다.. 목표 나의 목표는 remote 깃 레포에 있는 6a1c234 commit 위에 내 commit만을 쌓아 PR을 날리는 것이다. 1. 나의 commit 상태 PS C:\Users\20wjs\OneDrive\COMPUTER\***> git log --oneline 0a7d2bf5 (HEAD -> test2, origin/feat/#817, test, feat/#817) Merge branch 'feat/#817' of github.com:Youngseo-Jeon0313/f..
· 협업도구
문제 사항 오픈소스에 기여하는 과정에서 github indent가 지켜지지 않고 커밋되는 문제가 발생하였다. 혹시나 설치 상황에서 내가 놓친 게 있나 싶어 code style에 대한 issue 를 검색해보니 google java convention이 적용되고 있음을 알게 되었다! 해결 방안 1. IntelliJ > Files > Settings에서 google-java-format을 다운받아 Enable시킨다. (Enable 시키면 아래처럼 Disable 로 나타나게 된다) 2. 이후 Help > Edit Custom VM Options 버튼을 누르면 아래와 같이 창이 나오게 되는데 5번째 줄 아래의 내용을 복사해 붙여넣는다. --add-exports=jdk.compiler/com.sun.tools.ja..
0. 문제 과제 진행하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 설명 빡구현 문제로 뒤에 오는 과제를 확인하는 동시에 남은 시간이 있다면 내가 처리할 수 있는 못 끝낸 과제들을 확인하면 된다. 사실상 못 끝낸 과제들은 '가장 최근에 멈춘 과제'를 먼저 처리하기 때문에 stack 구조로 FILO 구조를 사용하여 구현하면 된다. 2. 문제 풀이 3. 문제 구현 from collections import deque def solution(plans): # 남으면 스택에 넣는다. (뒤에 있을수록 가장 최근에 멈춘 과제) stack = [] an..
본 내용은 아파치 카프카 애플리케이션 프로그래밍 with 자바 를 읽고 아파치 카프카 데브원영 강의를 들으며 공부한 내용입니다. 목차 0. 에필로그 1. 카프카란 1) 카프카의 개요 및 설명 2) 카프카의 구성 2. 카프카 실습 1) windows 10 Linux 설치 및 카프카 설치 2) Producer - Consumer 통신 (Window Local 환경) 0. 에필로그 Kafka 공부하기 전에 OS와 네트워크 DB 개념에 대해 알고 있으면 더 효과적으로 이해할 수 있을 것 같다. 책에 있는 java 코드는 깃허브에서 같이 공부해보기로 했다. 우선, 아래와 같은 고민을 하고 있다면 카프카는 해결을 위한 훌륭한 방안이 되어 줄 수 있다. 동기/ 비동기 데이터 전송에 대한 고민이 존재하는가? 실시간 데..
0. 문제 Z 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 1. 문제 설명 크기가 2^N X 2^N 모양 배열을 Z 모양으로 탐색하려고 할 때 R행 C열을 몇 번째로 방문하는지 찾아내는 문제이다. 규칙이 보이기 시작했고, 분할정복으로 채워나가며 추적하는 방법을 사용하려고 하였다. 2. 문제 구현 처음 시간초과 코드 N,R,C=map(int,input().split()) turn=1 def divide_and_conquer(x,y,size): global turn if y==R and x==C: p..
0. 문제 설명 궁금한 민호 1507번: 궁금한 민호 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 각각의 도시 사이에 이동하는데 필요한 시간이 주어진다. A에서 B로 가는 시간과 B에서 A로 가는 시간은 같다. 또, A와 B www.acmicpc.net 1. 문제 생각 플로이드 워셜의 응용으로, 플로이드 워셜의 완성본을 보고, 어떤 간선들이 실질적으로 쓰이는지에 대해 추적하는 문제이다. 따라서 그림에서 보이는 것처럼 직접적으로 가는 길의 가중치만을 표현하기 위해 '플로이드 워셜을 이용하여 건너 가는 것들'에 대한 값들은 0으로 바꾸어주면 된다. '-1'을 출력하는 것은 플로이드와샬로 더 짧은 거리로 갈 수 있는 거리가 있는데 '완성본'에서 그 짧은 거리가 반영되어..
· BackEnd
문제 시 삭제하겠습니다. 객체지향의 본질 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다. ex> 앨리스, 음료 는 객체이고 앨리스의 키(130cm), 앨리스의 위치("통로") 등은 객체의 property이다. 객체의 property value는 변화할 수 있다. 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다. 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다. 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다. ex> 객체의 행동은 ..
0. 문제 설명 우체국 2285번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 0 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. 모든 A[i]를 www.acmicpc.net 1. 문제 생각 처음에는 맨허튼 거리와 같은 알고리즘을 생각했다. 각 마을에 포함되는 사람들의 수를 가중치처럼 여긴 후 ∑각 마을의 index * 사람들의 수/ ∑사람들의 수 로 해결하려고 했는데 한 번 틀렸다 😥 아래 데이터를 조금 더 생각해보면 이 아이디어가 통하지 않음을 알 수 있는데 아래 데이터로 한번 생각해보면 좋다! 6 1 8 8 ..
0. 문제 우수 마을 1949번: 우수 마을 N개의 마을로 이루어진 나라가 있다. 편의상 마을에는 1부터 N까지 번호가 붙어 있다고 하자. 이 나라는 트리(Tree) 구조로 이루어져 있다. 즉 마을과 마을 사이를 직접 잇는 N-1개의 길이 있으며, www.acmicpc.net 1. 문제 생각 트리에서의 DP 문제이다. 트리란 사이클이 없이 모든 정점이 연결되어있는 그래프로, 사이클이 없는 그래프이므로 정점의 개수가 V개이면 간선의 개수는 V-1개라는 특징을 갖는다. DFS+DP 로 트리에서의 DP를 해결할 수 있고 아래처럼 DP 테이블을 채우기 위해 계속해서 인접한 노드를 탐색하는 점에서 DFS가 강력하다! 2. 문제 구현 import sys sys.setrecursionlimit(10**6) def d..
· 회고
제 3회 한국항공대학교 프로그래밍 경진대회 제3회 한국항공대학교 프로그래밍 경진대회 프로그래밍에 관심이 있다면, 지금 바로 도전해보세요. kaupc2023.netlify.app 대회 개최 우리 학교는 경인지역 6개 대학 소속으로 매년 SHAKE! 대회에 참여하고 있으며 이 대회에 참여하기 위한 10명의 인원을 교내에서 자체적으로 선발하고 있다. 자체 선발 대회인 KAUPC는 매년 KOALA 동아리에서 주최하고 있으며 이번 년도는 내가 동아리를 운영하고 있어 책임감을 가지고 대회를 주최하게 되었다! 문제 출제를 위해 급하게 500문제를 3달동안 풀었다..😬 대회는 3월부터 미리미리 준비했고 출제진은 gojib2022, hello70825, soo7652, 20wjsdudtj(나) 로 진행되었다. 다들 학교..
0. 문제 같이 눈사람 만들래? 20366번: 같이 눈사람 만들래? 높이가 (2, 5), (3, 5)로 구성된 눈사람 둘을 만드는 것이 최적의 경우 중 하나이다. |7-8| = 1 다른 경우로는 (2, 9), (5, 5)로 두 눈사람을 만드는 경우가 있다. |11-10| = 1 www.acmicpc.net 1. 문제 생각 4개를 뽑아서 대조하는 것으로 먼저 생각해볼 수 있다. 하지만 600C4(5억)는 2초 안에 못 들어오기 때문에 X 일단 N은 600이기 때문에 2초 안에 들어오려면 적어도 N^3까지는 가능하다. 우리가 4개를 뽑아 한 세트를 만든다고 하면 예를 들어 2 3 5 5 일 때 세트는 (1️⃣4️⃣, 2️⃣3️⃣)으로 1번째와 4번째 것이 하나의 세트가 되고 2번째와 3번째 것이 하나의 세트..
0. 문제 양팔저울 2629번: 양팔저울 첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무 www.acmicpc.net 1. 문제 해석 추의 종류와 구슬의 종류가 주어졌을 때 추들로 구슬들의 무게를 판단할 수 있는가 없는가를 물어보는 문제이다. 예를 들어 예제 2를 보면 추 1,4kg으로 알 수 있는 구슬의 무게는 1,4,3,5 kg에 해당한다. 양팔 저울의 양쪽에 놓을 수 있다는 것을 주의하자! 따라서 Knapsack으로 DP를 채워나간다. DP[추의 종류][구슬 무게] = 가능?불가능? 으로 나타낼 수 있고 DP table을 채우는 것은 for문 추의 무게로..
0. 문제 K번째 수 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 1. 문제 생각 일단 "정렬"에 대한 직접적인 언급이 있으나 정렬할 수 없다. N이 최대 10**5인데 NlogN을 수행할 수 없으므로! 그리고 나서는 A에 대한 B를 직접 만들어보았다. B=[1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, ...] 여기에서 규칙을 찾을 수 있다! 바로 각 숫자가 자신의 "약..
0. 문제 데이터 체커 22942번: 데이터 체커 데이터가 조건에 맞는다면 YES, 조건에 만족하지 않는다면 NO를 출력한다. www.acmicpc.net 1. 문제 생각 기하 골드 문제로, 처음부터 괄호 문제랑 연관해서 떠올리지는 못했다..🤦 힌트도 오히려 수학 문제처럼 줘서 더 헷갈릴 수 밖에 없었는데, 역시 백준에서 수학 문제가 나오면 자료구조나 알고리즘적 접근을 더 의심해보는 게 좋은 방향인 것 같다. 이 문제는 괄호 문제와 비슷하게 해결할 수 있다. ( ( ) ) 괄호들이 색깔들로 주어진다고 응용해서 생각하면 되고, 주어지는 상황 속에서 같은 모양의 '('이 들어갔다면 같은 모양의 ')'가 들어가 '('를 상쇄시켜주면 된다는 점에서 stack이라는 구조를 사용한다는 걸 떠올릴 수 있다. 2. 문..
0. 문제 공항 10775번: 공항 예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불 www.acmicpc.net 1. 문제 생각 공항 도킹에 대한 한국어 풀이가 생각보다 이해가 잘 되지 않아 예제를 계속 읽고서야 이해가 되었다. 차라리 밑에 예제를 예제 2 : [2][1][3][?] 로 풀이 방법을 줬으면 더 이해가 잘 되었을텐데 😥 아무튼 이 문제의 핵심은 "i번째 비행기를 1번부터 gi (1 ≤ gi ≤ G) 번째 게이트중 하나에 영구적으로 도킹하려 한다. 비행기가 어느 게이트에도 도킹할 수 없다면 공항이 폐쇄되고, 이후..
0. 문제 문자열 화폐 17828번: 문자열 화폐 첫 번째 줄에 문자열의 길이 N(1 ≤ N ≤ 5,000,000)과, 문자열의 가치를 나타내는 정수 X(1 ≤ X ≤ 500,000,000)가 공백으로 구분되어 주어진다. www.acmicpc.net 1. 문제 생각 어떤 문자열을 채워나가는 과정이다. 간단하게 증명하여 AAA 특정 문자열 ZZZ로 그리디 과정을 거친다는 것을 알 수 있다. 아래 테스트케이스를 생각하면서 풀면 도움이 되었다. 6 50 AAAAZZ 6 55 AAAAYZ 6 156 ZZZZZZ 2. 문제 구현 import sys input=sys.stdin.readline N,X=map(int,input().split()) if N*26X: print("!") else: List=['A' fo..
jeonyoungseo
youngseo's TECH blog