All
223 posts
java) til - 20240424

자바 ORM 표준 JPA 프로그래밍 - 기본편 다양한 연관관계 매핑 - 일대다 일대다 단방향 실무에서 연관관계의 주인이 Team이 되는 경우를 말한다. 대충 상황적으로 Team 입장에서 Member를 기록해야 하나, Member는 Team을 고려하지 않는 경우 나올 수 있는 설계다. 그런데 실질적인 테이블 데이터 간의 연관관계를 생각해보면, Team 은 외래키를 가질 수가 없다. 여기서 이 관계의 핵심문제는 개발자 입장에서 일 쪽에 작업을 한것 뿐이라고 생각했는데, 관계 특성 상 다(N)에 해당하는 쪽에도 영향을 미쳤다는 점이다. 일대다 단방향 정리 일대다 단방향은 일대다에서 일(1)이 연관관계의 주인이 되는 것 테이블 일대다 관계는 항상 다(N) 쪽에 외래키가 있다. 객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리하는 특이한 구조 을 꼭 사용해야함. 그렇지 않으면 조인 테이블 방식을 사용해야 한다. (중간 테이블을 하나 추가해야한다.) 일대다 단방향 매핑의 단점 엔…

April 24, 2024
til
java
docker-kubernetes ) til - 20240424

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 198. Pod와 컨테이너 사양(Spec) 추가 Spec 추가 template는 항상 Pod 를 대변하는 객체이다. 따라서 최초에 를 통해 deployment 를 설정한 것과는 다르게 설정되는 것이다. 더불어 이렇게 설정하는 것은 전체 Pod에 대한 설정이라고 생각하면 된다. Pod 설정하기 - 개체 -f 는 파일을 인식시키기 위한 옵션 값, 여러 개를 인식 시킬 때는 이 옵션을 여러번 사용하면 된다. 우선 이렇게 해보면 에러메시지로 가 필요하다고 이야기 한다. selector란 어떻게 하는 것인가. deployment 는 쿠버네티스 속에서 동적인 객체다. Pod의 확장 명령이 떨어지면 deployment 가 지속적으로 감시하며 살핀다. 이때 제어야 할 필요가 있을 때 가 필요해진다. Pod에 대한 라벨링, 티어 설정 등은 자유롭게 할 수 있고, 그걸 지정한 뒤 selector가 이걸 가리킴으로써 deploy…

April 24, 2024
til
backend
YAML 파일에 대해 알아보자

YAML 에 대해 알아보자 쿠버네티스를 배우면서 본격적으로 사용하는 환경이 YAML이기에 간단하게 정리해보는 YAML 문법이다. 기본문법 문서의 시작과 끝 문서의 시작은 를 적으면 되며, 선택 사항이다. 문서의 끝은 를 적으면 되며, 선택 사항이다. 들여쓰기(indent) 들여쓰기는 2, 4칸을 지원한다. 데이터 정의(map) 데이터는 키와 값의 형식을 띄고 있다. 객체 표현 기본적으로 특정 키 아래에 새로운 키와 값으로 구성된다. 배열 정의(array) 배열은 하이픈을 활용해서 작성이 가능하다. 또한 리스트 식으로 대괄호로 묶는 방법도 있다. 주석(comment) 표현 방식 참 거짓 표현이 가능하고, , , 외에 , 를 지원한다. 숫자 : 정수 또는 실수로, 따옴표 없이 사용하면 인식 한다. 개행 여러줄 적어야 할 경우가 있는데 이럴때 사용한다. 위의 내용을 json으로 변환하면 다음과 같다. 이때 바리에이션이 있다. 마지막 개행 삭제 중간 개행 삭제 주의사항 띄워쓰기 ke…

April 23, 2024
etc
docker-kubernetes ) til - 20240423

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 196. 명령적 접근방식 vs 선언적 접근방식 명령적 접근방식에서 선언적인 방식으로 여러가지 명령어를 통해 쿠버네티스를 구동하는 것을 배웠다. 그러나 이러한 방식의 단점은? 어렵진 않으나 명령어를 외워야 한다. 매번 작업에 적용해야 한다. 이러한 점들은 docker 때와 비슷하게 불편할 수 있고, docker compose를 배운 뒤 훨씬 편해졌고, 이러한 내용이 kubectl에도 적용될 수 있다. A Resource Definition 위에서 언급한 것처럼 파일 내의 구성을 기반으로 deployment 를 생성할 수 있고, 이를 쿠버네티스는 지원한다. YAML 파일 형태를 지원한다. 예시파일 비교 명령적 접근방식 선언적 수행방식 개별 명령어를 쳐서 접근하고 실행시킨다 파일 기반으로 상태가 적용되고 수정된다. docker run과 유사 docker compose 와 유사 197. 배포 구성 파일 생성하기(선언…

April 23, 2024
til
backend
java) til - 20240423

자바 ORM 표준 JPA 프로그래밍 - 기본편 다양한 연관관계 매핑 - 다대일 연관관계 매핑 시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 어노테이션은 JPA가 제공하며, DB랑 매핑을 위해 만들어진 것들이다. 다대일 : 일대다 : 일대일 : 다대다 : -> 쓰면 안된다. 단방향, 양방향 테이블 외래키 하나로 양쪽 조인이 가능하다. 사실 방향이란 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 / 아니면 양방향 연관관계의 주인 테이블은 외래키 하나로 두 테이블의 연관관계를 맺음 객체의 양방향 관계는 A->B B->A처럼 참조가 2군데 객체 양방향 관계는 둘 중 테이블의 외래키를 관리할 곳을 지정해줘야 한다. 연관관계의 주인 = 외래키를 관리하는 참조 주인의 반대편 = 외래키에 영향을 주지 않고, 단순 조회만을 진행한다. 다대일 [N : 1] 다대일 관계에서 외래키는 반드시 다 쪽에 있어야 한다. 다대일 단방향 정리 가장…

April 23, 2024
til
java
java) til - 20240421

자바 ORM 표준 JPA 프로그래밍 - 기본편 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인 1 양방향 연관관계 양쪽에서 참조해서 갈 수 있도록 만드는 것. 테이블의 연관관계는 기존의 단방향과 달리 차이가 없다. 여기서 테이블을 기준으로 곰곰히 생각해보면, 어떤 관계량 양쪽에서 어느쪽 외래키를 가지고 있기만 해도 실질적으로 양방향인 것을 의미한다고 볼 수 있다. 이렇게 설정하면 이제 Team, Member 각 객체에서 양방향으로 연결되고 서로 왔다갔다 하면서 데이터를 접근할 수 있게 바뀐다. 물론, 이렇게 양방향인 것보다 객체 중심으로 생각해보면 단방향인게 나을 수 있지만 이는 후술할 예정… 연관관계의 주인과 mapped by mapped by = JPA 의 이해 난이도를 높이는 주범 객체와 테이블 사이에 연관관계를 맺는 차이를 이해해야 한다. 객체와 테이블이 관계를 맺는 것의 차이점 객체 연관관계 = 2개(객체의 참조는 양쪽에서 가능하게 된다.) 회원 -> 팀 연관관계…

April 22, 2024
til
java
cote) til - 20240421

n^2 배열 자르기 문제 설명 정수 , , 가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. 행 열 크기의 비어있는 2차원 배열을 만듭니다. 에 대해서, 다음 과정을 반복합니다. 1행 1열부터 행 열까지의 영역 내의 모든 빈 칸을 숫자 로 채웁니다. 1행, 2행, …, 행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다. 새로운 1차원 배열을 이라 할 때, , , …, 만 남기고 나머지는 지웁니다. 정수 , , 가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤  ≤ 107 0 ≤  ≤  < n2  -  < 105 입출력 예 n left right result 3 2 5 4 7 14 입출력 예 설명 입출력 예 #1 입출력 예 #2 나의 풀이 최초에는 이중 for문을 활용하여 해당하는 경우의 숫자배열을 다 만들었다. 하지만 이러한 형태는 n의 값이 조금만 늘어도 시간 …

April 22, 2024
til
algorithm
java) til - 20240421

자바 ORM 표준 JPA 프로그래밍 - 기본편 연관관계 매핑 기초 - 단방향 연관관계 목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일, 일대다, 일대일, 다대다의 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요 예제 시나리오 회원, 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다 회원과 팀은 다대 일 관계이다. 객체를 테이블에 맞추어 모델링 연관관계를 고려하지 않은 객체 설계 이렇게 구조를 짜면 이러한 데이터를 생성할 때 애매함을 우선 보여준다. 뿐만 아니라 값을 찾을 때도 문제가 된다. 객체를 테이블에 맞춘, 데이터 중심의 모델링은 협력관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체 사이에는 이런 큰 간격이 있다. 객체 지향 …

April 21, 2024
til
java
docker-kubernetes ) til - 20240421

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 195. Deployment 롤백 & 히스토리 rollout undo image를 잘못 설정 하는 등의 문제가 발생할 수 있다. 이렇게 된 상태에서 상태를 보기 위해서는 rollout 커맨드를 활용할 수 있다. 이렇게 되면 문제가 발생하고 이때 상태를 보고자 rollout 커맨드를 활용하면 대화용 세션으로 들어가게 된다. 실제로 이렇게 되면 대시보드에서도 pod에 문제가 발생하게 된다. 오래된 복제본이 종료가 발생하지 않으며, 신규 pod은 계속 pending 상태를 유지하는 것이다. 이렇게 되는 이유는 kubernetes에서는 정책상 신규 pod 가 정상 실행 전 까지는 이전 이미지를 담은 구버전 pod 가 종료되지 않으며, 이를 통해 서비스가 계속 유지 되도록 만드는 것이다. 이러한 에러가 발생해서 다시 정상적인 버전으로 이미지를 돌려야 한다. 이렇게 하고 나니 pod 의 문제가 해결되고 기존 버전으로 돌아오…

April 21, 2024
til
backend
docker-kubernetes ) til - 20240420

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 192. 컨테이너 재 시작 실습에서 /error 이라는 라우팅과 함께 Node 예제를 종료 시키는 코드를 갖고 있었다. 해당 URL 에 접근하게 되면, process 가 종료하게 되면서 에러가 발생하게 된다 . 이때 이렇게 되는 것은 pod와 pod의 컨테이너 상태를 모니터링 되고 있고, 모닌터링 과정에서 실패가 발생하면 다른 걸로 교체가 되거나 하는게 아닌, 일단은 해당 pod와 pod 내의 컨테이너를 다시 시작한다. 또한 이 내용은 kubernetes dashboard에서도 볼 수 있는 것이다. 또한 해당 pod로 들어가면 세부적으로 그러한 행동이 나타났다는 로그 등도 함께 확인이 가능하다. 193. 실제 스케일링 재시작과 관련한 유용한 명령이 하나 더 있다. 오토 스케일링 기능이 없다고 생각하면 kubectl 은 자동으로 pod의 숫자를 늘리거나 줄이지 않는다. 이럴 때 트래픽이 더 많이 유입될 것이라고 …

April 20, 2024
til
backend
java) til - 20240420

자바 ORM 표준 JPA 프로그래밍 - 기본편 준영속 상태 준영속 영속 -> 준영속 영속 상태의 Entity가 영속성 컨텍스트에서 분리(detached) 영속성 컨텍스트가 제공하는 기능을 사용하지 못하는 상태를 의미한다. 준영속 상태로 만드는 방법 : 특정 Entity 만 준 영속상태로 전환한다. : 영속성 컨텍스트를 완전히 초기화 한다. : 영속성 컨텍스트를 종료 시킨다. Entity Mapping : 객체와 테이블 매핑 Entity 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity JPA가 관리하며 entity 라고 부른다. JPA 를 사용해서 테이블과 매핑할 클래스는 @Entity 가 필수로 붙어야 한다. 주의사항 기본 생성자 필수(파라미터가 없는 public 또는 private 생성자) final 클래스, enum, in…

April 20, 2024
til
java
java) til - 20240419

자바 ORM 표준 JPA 프로그래밍 - 기본편 플러시 플러시 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것. 플러시 발생 데이터 트랜잭션이 일어나고 끝나면 플러시는 발생한다. 이때는 커밋이 일어난게 아니므로 보내기만 한 상태를 의미 한다. 알아두면 좋은 것!, 플러시가 발생한다고 1차 캐시가 지워지는 것이 아니다. 즉 영속성 컨텍스트 자체는 유지되고 데이터베이스에 반영만 우선 시키는 것이고 커밋으로 확정 전 상태를 만들어 두는 것이다. 변경감지 수정된 Enitty 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법 : 직접 호출, 테스트용 혹은 강제 수동 쿼리로 쿼리 날아가는 것을 보고 싶을 때 사용이 가능하다. 트랜잭션 커밋 : 플러시 자동 호출 JPQL 쿼리 실행 : 플러시 자동 호출 JPQL 쿼리 실행 시 플러시가 자동 호출 되는 이유는? Flush 모드 옵션 굳이…

April 19, 2024
til
java
cote) til - 20240418

괄호 회전하기 리벤지 기존의 풀었던 방식은 테스트 코드에선 성공적이었으나, 실제 체점에서 엣지케이스를 잡지 못하여 다시 도전한다. 문제 설명 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다. , ,  는 모두 올바른 괄호 문자열입니다. 만약 가 올바른 괄호 문자열이라면, , ,  도 올바른 괄호 문자열입니다. 예를 들어,  가 올바른 괄호 문자열이므로,  도 올바른 괄호 문자열입니다. 만약 , 가 올바른 괄호 문자열이라면,  도 올바른 괄호 문자열입니다. 예를 들어,  와  가 올바른 괄호 문자열이므로,  도 올바른 괄호 문자열입니다. 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 가 매개변수로 주어집니다. 이 를 왼쪽으로 x (0 ≤ x < (의 길이)) 칸만큼 회전시켰을 때 가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요. 제한사항 s의 길이는 1 이상 1,000 이하입니다. 입출력 예 s result …

April 18, 2024
til
algorithm
java) til - 20240416

자바 ORM 표준 JPA 프로그래밍 - 기본편 영속성 컨텍스트(1) JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) 영속성 컨텍스트 Entity Manager Factory, Entity Manager 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 엔티티를 영구 저장하는 환경이라는 의미를 가진다. DB와 관련이 있으면서도 없다. 영속성 컨텍스트는 일종의 논리적 개념으로, manager를 통해서 접근이 가능해진다. J2SE 환경 Entity Manager 와 영속성 컨텍스트는 1:1로 생성이 된다. J2EE, Spring 프레임워크와 같은 컨테이너 환경 Entity Manager 와 영속성 컨텍스트는 N:1 의 관계를 가진다. Entity 의 LifeCycle DB에서 가져오는 객체 Entity 는 나름의 생명 주기를 갖고 있다. 비영속성(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는…

April 18, 2024
til
java
cote ) til - 20240416

[PCCE 기출문제] 8번 / 창고정리 문제 설명 선빈이는 게임을 즐기던 중 가지고 있는 물건이 너무 많아 창고 정리를 하기로 했습니다. 선빈이가 보유한 게임 속 창고는 여러 칸으로 나누어져 있고 각 칸에는 물건들이 담겨있습니다. 창고를 정리할 방법을 고민하던 선빈이는 같은 물건이 여러 칸에 나누어 들어있는 것을 발견하고 우선 같은 물건끼리 최대한 겹쳐쌓는 방식으로 창고를 정리하기로 했습니다. 선빈이의 창고에 들어있는 물건의 이름과 개수는 리스트 형태로 주어지며, 한 칸에 겹쳐질 수 있는 물건의 개수에는 제한이 없다고 가정합니다. 예를 들어 창고의 각 칸에 담겨있는 물건의 이름이, 각 물건의 개수가 이라면 연필과 책을 한 칸에 각각 겹쳐 쌓아 간단하게 , 로 만들 수 있습니다. pencil book javacpp.jpg 주어진 solution 함수는 정리되기 전 창고의 물건 이름이 담긴 문자열 리스트 와 각 물건의 개수가 담긴 정수 리스트 이 주어질 때, 정리된 창고에서 개수가 가…

April 16, 2024
til
algorithm
docker-kubernetes ) til - 20240416

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 188. 첫 번째 Deployment - 명령적 접근 방식 사용 쿠버네티스를 배우면서 생기는 가장 기본적인 망각 중에 하나가, 바로 도커를 결국 사용은 한다는 점이다. 반대로 도커를 자체적으로 컨테이너를 실행하지 않는 다는 것이다. 필요한 프로그램, 도커 파일이 준비되어 있다면 docker 이미지를 준비한다. 이미지가 빌드 되고 나면 이미지를 이제 쿠버네티스 클러스터로 보내면 된다. (Pod) Pod 가 이를 실행하고 관리할 것이다 deployment 올릴 쿠버네티스에 상태를 파악해야 하므로 minikube status 로 상태를 파악한다. 이때 동작하는 minikube가 정상이 아니라면, 다시 minikube를 재시작 하면 된다. kubectl 을 기억하자. : 지난 시간에 이 툴을 설치했음. 해당 툴은 항상 로컬 기준으로 존재하고, 로컬 시스템에서 실행하는 명령이다. 마스터 노드와 해당 클러스터의 컨트롤러라고 …

April 16, 2024
til
backend
java) til - 20240416

자바 ORM 표준 JPA 프로그래밍 - 기본편 Hello JPA - 애플리케이션 개발 주의 Entity Manager 는 하나만 생성해서 애플리케이션 전체에서 공유한다. Entity Manager 는 thread 간의 공유가 아니라, 사용하고 버리는 구조다 JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다. 위의 내용 덕분에 데이터의 트랜잭션 사이에서 데이터 객체는 변동 사항이 발생하면 자동으로 알아서 데이터의 변화를 저장하고 반영이 된다. JPQL 소개 JPA 를 사용하면 Entity 객체 중심의 개발이 가능해진다. 기본적인 데이터의 탐색은 Entity Manager를 활용해도 된다. 하지만 JPA 에서 디테일하게 검색을 하기 위한 방식은? 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 JPQL은 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리로 기존의 쿼리와는 약간 다르다. SQL 에 의존적이지 않음 이후 뒤에서 자세히 배울 예정 자바 ORM 표준 JPA…

April 16, 2024
til
java
CSAPP-2024-04-3주차 ~ 4주차-정리

Machine-Level Representation of Programs 3.6.2 Accessing the Condition Codes 조건 코드를 직접 수행읽는 대신 사용하는 방법 세 가지 조건코드의 조합에 따라 단일 바이트를 0, 1 로 설정한다. 프로그램의 다른 부분으로 점프할 수 있다. 데이터를 조건부로 전송할 수 있다. 1번의 방법은 set 명령어에서 나타나며, 이때 단 접미사가 다른 연산자와 같이 워드 크기를 나타내는게 아니라는 점이 중요하다(less, below의 l, b를 나타냄, long 또는 byte 아님) 3.6.3 Jump Instructions jump 명령어는 기본적인 명령어의 흐름에서 뛰어 넘어 다른 명령어를 수행하고 다시 시작하도록 만드는데, 오브젝트 코드 파일을 생성할 때 어셈블러가 모든 이러한 명령어의 주소값을 결정한다. 명령어들은 간접 점프와 직접 점프가 있는데, 직접 점프의 경우 어셈블리코드에서 점프 목표로 레이블을 지정하고 작성되며, 간…

April 15, 2024
study
CSAPP-2024-04-2주차-정리

Machine-Level Representation of Programs 3.4.2 Data Movement Instructions 가장 많이 사용되는 명령어 중 하나는 데이터 위치를 복사하는 명령어일 것이다. 소스와 목적지 유형, 수행하는 변환, 그리고 기타 부작용이 다른 여러가지 데이터 이동 명령어가 있음을 보여준다. 위 그림의 데이터 이동 명령어는 가장 단순한 형태인 mov 클래스다. 여기서 각 워드 바이트 크기를 다룬다는 차이점을 갖고 있다. 소스 피연산자는 상수 값, 레지스터에 저장된 값, 메모리에 저장된 값을 지정하고, 이동할 목적지도 지정해준다. 이때, x86-64 의 기준 특성상 이동 시 모두 메모리 위치를 참조하는 식으로는 되어 있지 않다. 메모리에서 메모리는 반드시 두번의 명령어가 필요하다. 대부분의 경우 mov 명령어는 목적지 피연산자에 의해 지정된 특정 레지스터 바이트나 메모리 위치만을 업데이트 한다. 아래의 그림은 특정 위치에서 목적지로의 다섯가지 조합을 …

April 09, 2024
study
RTOS 에 대해 알아보자

RTOS 에 대해 알아보자 Intro CS 스터디에서 시작한 토론 및 미니 세미나는 요즘 계속해서 학습의 감초 역할을 하는 것 같다. 지루한 공부에서 벗어나서 관심 있는 것 그런데 이유가 없다는 생각에, 우선순위가 낮다고 생각하는 찰나에 놓치는 많은 소 주제들. 그런 걸 찾아보고 설명하니 꽤나 재밌는 시간이 CS 학습 시간이 되는 것 같다. 스타트업이나 대기업들이 눈독을 들이는 개발 분야의 대세는 몇 가지 키워드가 존재한다. 그것들이 가지는 가치는 어마무시하단 평가를 받고 있으며, 그걸로 투자를 유치하거나 회사의 기술력을 과시하기도 하는 등을 통해 연일 끝이 없는 자기 생산과 자기 투자를 반복하고 있다. 그리고 그런 다양한 요소들 중, 요즘의 가장 큰 대세는 역시 AI라는 분야일 것이다. 일전에 한창 거품이 끌어 올랐던 NFT, BlockChain, BitCoin과는 다르게 정말로 실물로 우리 사회의 영향력을 주는 대세가 되고 있으며, 이 AI의 잠재력은 정말 말이 안될 정도라고 …

April 08, 2024
etc
객체 지향 이야기

객체지향 이야기를 읽고 기 프로그래머로 하루를 살아가는 것은 쉬운 일이 아니다. 수도 없이 바뀌는 다양한 기술들은 나를 홀리고, 세상을 홀리며, 돈을 홀린다. 수 많은 투자 아이템들은 멋진, 최신의, 말 그대로 ‘엣지’가 살아 있는 기술들을 가지고 달려간다. 그렇기에 개발자라는 건, 프로그래머라는 건 그런 것들에 민감할 수 밖에 없고 또 그 와중에 진짜와 가짜도 구분하는 능력이 요구된다. 참 쉽지 않은 이야기다. 그리고 그런 와중에 항상 스스로를 바라보면서 느낀다. 프레임워크가 지배하는 시대에 왔으니, 그 지배하는 도구를 쓰면 되지 않을까. 그러니 chatGPT를 마주하면 우선 쳐 보는 것이 도구를 사용하는 방법이며, 그 과정에서 필요한 요소의 존재 의의를 쳐다보기 보단, 일단 하는 방법의 HOW TO 라는 포인트에 목숨을 걸고, 또 그걸 위해 $22를 내게 된다. 하지만 그런 이야기들 중에도 결국 돌고 돌아 개발자에게 필요한 것은 도구에 대한 철학과 근본이라는 것을 깨닫고 만다…

April 08, 2024
etc
Lua Script 기본 개념과 문법 정리

Lua Script 란 1993년 개발된 프로그래밍 언어. 브라질 리우데자네이루의 교황청대학교에서 호베르투 예루잘링스키 및 2명이 공동 제작했다. 달을 의미하는 포르투갈어 단어에서 따왔다. 스크립트 언어를 하나의 목적으로 가지고 있기 때문에 굉장히 작고 가벼운 인터프리터형 언어다. 태생 자체가 C/ C++ 프로그램 내부에 포함시키기 쉬운 깔끔한 문법의 가벼운 스크립트 언어를 목표로 개발 되었다. 교황청대학교 컴퓨터 그래픽 기술 연구소에서 내부적으로 개발해서 사용하던 기존의 데이터 처리용 스크립티 언어 SOL과 DEL의 한계를 극복할 더 강력한 언어가 요구되었다고 한다. 언어적 특징 가벼움 인터프리터의 용량이 KB 단위로 작고 굉장히 빠르다. 굉장히 적은 데이터 형만 지원하고, 쉽게 붙일 수 있기에 절차적으로도, 객체지향적으로도, 함수형으로도 이용이 가능하다. 문법적 특징 기본 자료형 : null 이 Lua 에선 nil 로 쓴다. 진리값은 boolean 타입일 때, true, …

April 06, 2024
study
[BTB] 고민 정리 - 기존 파일의 관리 방법 & 이미지 처리 방법

기존 파일들을 어떻게 호환시킬 것인가? 문제상황 현재의 가장 큰 개발 과제 중 하나는 바로 기존 블로그 글에 대한 마이그레이션과 관련된 부분이다. 기존의 데이터는 정적 사이트 생성기인 Gatsby를 활용하여 쿼리를 통해 구현이 되어 있다. 하지만 웹 서비스 형식으로 구현이 될 현재의 형태에서 기존의 파일 기반의 블로그의 데이터들은 데이터의 변환이 되었든, 호환이 되었든 무언가 조치를 통하지 않으면 안된다. 요구 기준 사항 MySQL 을 기준으로 잘 동작할 수 있게 처리가 되어야 한다. (미확정) 검색 기능 최적화를 위해 Elasticsearch 같은 검색 엔진을 고려할 수도 있다. 2번이 아니더라도 자체적인 검색 기능 구현함에 있어 성능최적화를 고려해야한다. 향후 글쓰기에서 필요한 기능들이 동일하게 동작하도록 호환이 되어야하고, 기존의 데이터들은 메타데이터 형식으로 MD 파일 상단에 동일하게 위치해 있음에서 호환이 되어야 한다. 결론 파일 형식을 그대로 이어가면서, 파일 형식에서…

April 06, 2024
project
java) til - 20240403

자바 ORM 표준 JPA 프로그래밍 - 기본편 자바에 다양한 것들이 있겠지만 SQL 을 이해하고 JPA 활용도를 높이기 위해 해당 내용을 우선적으로 강의를 듣고 정리해보고자 한다. Hello JPA - 프로젝트 생성 프로젝트 생성, 옛날엔 좀 그랬으나 지금은 intelliJ 를 활용해서 편하게 할 것 h2 가 연습용으론 좋다 빈 프로젝트를 생성하고, hibernate, h2 database driver를 설치한다. 이때 기존의 강좌와는 다르게 작성해야 한다. 더불어 사용 시 spring boot 를 사용하는 만큼 스프링부트 기반으로 버전 관리를 해주면 좋다. 4.0.0 자바 ORM 표준 JPA 프로그래밍 - 기본편 Hello JPA - 프로젝트 생성

April 03, 2024
til
java
영어 단어 모음 - 2024.04 - 1st

2024년 4월 1주차 2024-04-01 2024-04-02 2024-04-03 2024-04-04 2024-04-05 2024년 4월 1주차 2024-04-01 2024-04-02 2024-04-03 2024-04-04 2024-04-05

April 02, 2024
etc
CSAPP-2024-04-1주차-정리

Machine-Level Representation of Programs 3.2.3 Notes on Formatting 서식에 관한 노트 어셈블리 코드에 대한 포맷들에 대해 앞으로 사용할 내용을 설명한다. 모든 라인에서 이 붙어 있다면 어셈블러와 링커의 가이드 역할을 하는 명령어 라고 보면 된다. 기본적으로 어셈블러 상태에는 없지만 본 교재에서는 각 라인 왼쪽에 라인 번호를, 오른쪽에는 원본 코드와 연관된 설명을 첨부한다. CSAPP 저자들은 웹에서 관련 자료를 제공해주고 있다. 3.3 Data Formats 16비트 아키텍쳐 때부터가 기원이다보니, 인텔은 16비트 데이터 타입(2바이트)를 워드(word) 라고 불렀으며, 이것을 기반으로 더블워드(double words), 64비트 데이터 양에 대해서는 쿼드 워드(quad words)라고 부른다. x86-64 명령어 셋 역시 모든 바이트, 워느, 더블이나 쿼드 워드까지를 아우르는 명령어 셋을 갖고 있다. 부동 소수점에 대해서는 8…

April 02, 2024
study
[BTB] 프로젝트 관리 일지

BTB Project 이번에 혼자 진행하는 해당 프로젝트는, 일종의 마지막 정리에 가까운 프로젝트이다. 이 프로젝트에 대한 내용 정리를 위한 글로써 지속적으로 업데이트를 해볼 예정이다. “Beyond The Bracket” 우리는 개발을 하면서 여러 상황에 놓인다. 어려운 일들, 힘든 일들, 과연 내가 가능할까? 하는 생각들은 불안과 공포, 체념을 야기하게 된다. 그리고 그건 마치 우리가 치는 코드의 꺽쇠와 비슷한 느낌을 주곤 한다. 컴퓨터의 어떤 프로그래밍 언어도 꺽쇠(Edge Bracket)를 사용한다. 꽤 특이한 친구들이 있긴 하지만 대부분의 C 기반인 경우 를 통해 범위를 정하며 그 범위는 소위 어렵게 말하면 stack frame의 역할을 하기에 벗어나면 segmentation fault를 발생 시키고 만다. 컴퓨터 입장에서 이러한 룰을 정한 것은 어쩌면 CS적 의도이므로, 이게 꼭 나쁜건 아닐 수 있다. 하지만 결국 그 한계를 정해 놓고 나니 생기는 불편함, 그리고 그…

March 28, 2024
project
cote ) til - 20240328

2016년 문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각  입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 “TUE”를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 a b result 5 24 “TUE” ```python # 내 마음데로 풀어보기 # 윤력은 2월 마지막이 29일 # 30, 31일 조심! 1, 3, 5, 7, 8, 10, 12월이 31일이가 def solution(a, b): 가운데 글자 가져오기 문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면…

March 28, 2024
til
algorithm
cote ) til - 20240326

해시 > 포켓몬 문제 설명 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택 첫 번째(3번), 네 번째(3번) 폰켓몬을 선택 두 번째(1번), 세 번째(2번) 폰켓몬을 선택 두 번째(1번), 네 번째(3번) 폰켓몬을 선택 세 번째(2번), 네 …

March 26, 2024
til
algorithm
영어 단어 모음 - 2024.03 - 4th

2024년 3월 4주차 2024-03-25 2024-03-26 colloquially : 구어체로, 회화체로 incorporate : 포함하다, 설립하다 vestige : 마지막 흔적 arcane : 신비로운, 불가사의한 2024-03-27 2024-03-28 2024-03-29 2024년 3월 4주차 2024-03-25 2024-03-26 2024-03-27 2024-03-28 2024-03-29

March 26, 2024
study
CSAPP-2024-03-4주차-정리

Machine-Level Representation of Programs 이번 챕터에서는 기계어 코드와 사람이 읽을 수 있도록 표현된 어셈블리 코드에 대해 자세히 살펴볼 것이다. 대부분의 시간동안, 고수준의 언어로 생산된 고수준의 추상화를 가진 환경에서가 프로그래밍 개발이 생산적이며, 신뢰성이 있다. 예를 들면 타입 검사를 포함하여, 숙련된 어셈블리 언어 개발자들의 노력으로 현대의 최적화된 컴파일러는 훌륭한, 기계에 특화된 기계어 코드로 변환을 시켜준다. 그렇기에 왜 우리는 기계어를 배울 필요가 생기는 것일까? 기계어 코드를 읽는 것으로, 우리는 컴파일러의 최적화 능력의 수준을 이해하고, 코드 상의 비효율적인 영역이 어딘지 분석하는 눈이 생길 수 있다. 더 나아가서 우리가 알아야 하는 런타임 시의 동작들에 관해 추상화 언어로 숨겨진 것들의 추상 레이어들 속에서도 정확하게 이해할 수 있게 된다. 취약성이 어떻게 증대 될지를 이해하는 것, 그리고 이러한 부분들에 대하여 어떻게 보호할 …

March 25, 2024
study
Web Assembly 를 알아보자

웹 어셈블리를 알아보자 웹과 어셈블리. 사실 두 조합에 대해 조금 공부를 해보면 어울리지 않는 다는 것을 알 것이다. 웹 시장을 평정한 자바스크립트는 인터프리터 방식이고, 크롬의 V8 엔진을 통해 실행되며 컴파일 방식이 아니다. 하물며 멀티 스레드 방식이 아닌 언어적 특성 상 CPU의 자원만을 사용하고 GPU 사용이 제한된다는 점을 포함해 성능적으로 다른 언어들에 비해서는 상당히 ‘부족하다’는 인식이 있다. 거기다 브라우저의 구조인 BOM, DOM 구조를 갖추다보니 하드웨어를 건드리기 ‘힘들다 ‘는 제약 등이 겹쳐지면서 웹은 오로지 웹의 기능성에 집중되며 하드웨어 조작은 어렵다는 이야기들이 많고, 그만큼 제한이 있는 것으로 보는 경우가 많았다. 하지만 이는 피상적인 영역에서의 이야기다. 웹 시장의 성능적 대 변화를 일으킨 크롬의 V8 엔진은 기존의 인터프리터에서 JIT 컴파일러를 추가하는 방식으로 개선되었으며, 이 방식으로 구현된 엔진의 성능은 여전히 다른 엔진을 쓰지 않아도 될 …

March 25, 2024
etc
docker-kubernetes ) til - 20240320

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 183. Kuberntes: 요구 설정 & 설치 단계 로컬 머신에서 쿠버네티스를 다루기 위해 설치해야 할 구성요소는 다음과 같다: 클러스터: 쿠버네티스 클러스터는 마스터 노드와 하나 이상의 워커 노드로 구성되며, 이 클러스터는 실제 머신이나 가상 인스턴스에 분산되어 운영될 수 있다. 마스터 노드 소프트웨어: 마스터 노드에는 쿠버네티스의 핵심 구성 요소인 API 서버, 스케줄러 등이 설치되어야 한다. 워커 노드 소프트웨어: 워커 노드에는 Docker와 같은 컨테이너 런타임과 kubelet이 설치되어야 한다. kubectl: 쿠버네티스 클러스터와 통신하기 위한 커맨드 라인 인터페이스 도구로, 개발자와 관리자는 이를 사용하여 클러스터에 명령을 보낼 수 있다. 로컬에서 쿠버네티스를 실험하기 위해서는 다음 도구도 필요하다: minikube: 로컬 머신에서 쿠버네티스 클러스터를 쉽게 생성하고 관리할 수 있는 도구로, 가상 머…

March 25, 2024
til
backend
java) til - 20240320

TIL of Java Spring 본 내용은 Udemy를 통한 학습 내용이다. 복습 및 완벽 정리가 아닌, 핵심이나 놓치지 말 것들 위주의 정리인 만큼, 내용이 온전히 담기진 않는다. 15강. printf() 사용법, system.in.read() 사용법, Scanner 클래스의 여러 메소드 사용법 printf 사용법 정리 Java의 메소드는 출력 형식을 지정할 때 사용되며, 객체를 통해 콘솔에 텍스트를 출력하는데 유용합니다. 여기서 핵심 포인트를 세 가지로 정리됨 기본 사용법: 는 포맷 지정자를 사용하여 변수의 값을 문자열로 변환하고, 지정된 형식에 맞춰 출력한다. 기본 구조는 이다 포맷 지정자: 포맷 지정자는 기호로 시작하며, 출력할 데이터의 타입과 형식을 지정한다. 예를 들어, 는 정수를, 는 문자열을 나타낸다. 정밀도, 폭, 사용할 공간, 숫자 형태 등을 세밀하게 조정할 수 있다 예시: 정수 출력: → 101 소수점 아래 두 자리까지 출력: → 123.46 문자열…

March 25, 2024
til
java
[BTBP] 요구사항 명세서 및 유스케이스 작성

개요 프로젝트의 목표, 범위, 기능을 정의하는 문서로, 프로젝트의 근간이 될 문서를 작성해야 한다. 필요 문서 요구사항 명세서 : 프로젝트의 목적, 목표, 기능, 사용자 요구사항을 상세히 기술해보는 연습을 한다. 유스케이스 : 사용자와 시스템 간의 상호작용을 기술하여 기능적 요구사항을 명확히 하는 역할을 한다. 요구사항 명세서를 잘 쓰기 위해… 요구사항 명세서(SRS, Software Requirements Specification)은 요구사항 정의서, 요구사항 기술서와 같은 문서로 봐도 된다. 스타트업 내부 의견을 정리하기 위해 작성하는 것이 좋다. 왜 작성해야 하나? 프로젝트 전체 규모를 파악 구현 가능 여부에 대한 논의 커뮤니케이션 비용 절약 프로젝트 일정 계획 수립 요구사항 명세서의 종류 기능적 요구사항(Functional Requirements) 기능적 요구사항은 기능들을 설명한다. 비기능적 요구사항(Non-Functional Requirements) 비기능적 요구사항은…

March 25, 2024
project
2024 네이버 공채 코테 후기 feat chatGPT와 함께 성장하기

네이버 공채를 도전해보았다 두둥 두둥, 공채 소식을 듣게 된 것은 매우 급작스럽게였다. 피어 개발자들 디스코드에서 갑작스럽게 올라온 공채 소식은, 피어 업데이트를 해야 하는 상황 속에서, 취업 준비에 정신이 없던 많은 이들의 머릿속에 울려퍼졌다. 그 중에 나 역시 포함되었고, 결국 싫든 좋든 네이버라는 곳을 도전할 기회는 버릴 수 없단 생각에, 지금까지의 쌓아 올린 것의 종지부를 찍기위해, 해야 한다는 마음만 가득했던 영역을 고민하기 아니, 억지로 시작했다. 어디보자.. 내가 코딩 테스트를 어디까지 준비했더라?? 처음에는 대단히 막막했다. 그도 그럴 것이 기존에 코딩테스트를 준비해야 한다는 말을 세간에서 듣고, 걱정 반, 어떻게 해야할지 막막함 반으로 시작했던 기억이 떠올랐다. 이미 학습한 인강들, 처음에는 인강을 다시 복습을 해야 할까? 라는 생각이었다. 그러나 한 가지. 작년의 기억이 불현듯이 떠올랐다. 작년에도 네이버 공채엔 도전 했었고 시험을 봤던 기억. 코딩 테스트를 칠…

March 24, 2024
etc
cote ) til - 20240322

이진 변환 반복하기 문제 설명 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 “c를 2진법으로 표현한 문자열”로 바꿉니다. 예를 들어, 이라면, x에 이진 변환을 가하면  이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 “1”이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 s의 길이는 1 이상 150,000 이하입니다. s에는 ‘1’이 최소 하나 이상 포함되어 있습니다. 입출력 예 s result 입출력 예 설명 입출력 예 #1 “110010101001”이 “1”이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다. 회차 이진 변환 이전 제거할 0의 개수 0 제거 후 길이 이진 변환 결과 1 “11001…

March 22, 2024
til
algorithm
네이버 코테를 위한 마지막 몸부림

드디어… 네이버 공채가 열렸다는 소식이 들렸다. 작년에도 1차 서류 통과는 했었고 드디어 때가 온 게 아닌가 싶다. 사실 대단한 일은 아니라고 생각한다. 아마 성실하게 하신 분들이라면 어렵지 않게 통과할 것이다. 작년 같은 경우에도 지금보다도 포트폴리오는 준비가 확실하지 않았으나 1차를 합격했었던 것으로 미루어 볼 때 진짜는 코딩 테스트를 통과 이후가 아닐까 싶다. 적성 검사까지 잘 맞을 수 있을지, 걱정 보단 조금이라도 손을 놀려서 파이썬 문제 풀이 방식을 익혀야지 ㅠ 코테.. 자신이 없긴 하지만 그래도 작년과는 다르다..! 마지막 스퍼트로 python 핵심 코테 기술들 위주로 정리하면서 학습 하려고 한다. 토요일 오전에 치는 시험… 목표는 3문제 중 2문제라도 맞추기다. 😂😂 알게된 핵심 내용 위주 사전 자료형에서 데이터를 찾아 탐색하는 것은 생각보다 시간 복잡도가 크지 않아 탐색 시 속도가 빠르다. 단 키가 주어질 때 이야기다 정규식을 활용하기 위해 re 라이브러리를 i…

March 22, 2024
til
algorithm
cote ) til - 20240321

나머지가 1이 되는 수 찾기 문제 설명 자연수 이 매개변수로 주어집니다. 을 로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 3 ≤  ≤ 1,000,000 입출력 예 n result 10 3 12 11 입출력 예 설명 입출력 예 #1 10을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다. 입출력 예 #2 12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다. 음양 더하기 문제 설명 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solu…

March 21, 2024
til
algorithm
cote ) til - 20240320

크레인 인형뽑기 게임 문제 설명 게임개발자인 “죠르디”는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. “죠르디”는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. crane_game_101.png 게임 화면은 “1 x 1” 크기의 칸들로 이루어진 “N x N” 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 “5 x 5” 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 “1 x 1” 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을…

March 20, 2024
til
algorithm
docker-kubernetes ) til - 20240320

색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기 181. 모듈 소개 본 모듈에서 진행할 학습 내용은 총 3단계 Kubernetes, 테스팅 환경 구축해보기 Kubernetes 객체들과 작업 진행해보기 실제로 예제를 통해 배포를 진행해보기(local 환경으로) 182. Kubernetes 는 인프라를 관리하지 않습니다. 쿠버네티스가 해주는 작업과 아닌 작업을 구분을 명확하게 하는 것이 해당 도구를 효과적으로 사용하는 가장 핵심 중에 핵심이다. 쿠버네티스가 할 수 없는 것은 머신의 구체적인 가상 인스턴스나 컴퓨터에 대해 전혀 모르며 쿠버네티스 API 서버, Kublet 및 다양한 서비스는 매뉴얼하게 스스로 설정해줘야 한다. 인스턴스나 시스템을 업데이트 하고, 운영체제 업데이트를 유지하며, 전체 네트워크 보안 그룹 항목의 관리 등은 결국 개발자의 몫이다. 쿠버네티스가 관심 가지는 영역은 실패한 컨테이너에 대해선 관심을 가진다. 포드를 생성, 포드에서 컨테이너를 실행…

March 20, 2024
til
backend
java) til - 20240320

TIL of Java Spring 본 내용은 Udemy를 통한 학습 내용이다. 복습 및 완벽 정리가 아닌, 핵심이나 놓치지 말 것들 위주의 정리인 만큼, 내용이 온전히 담기진 않는다. 12강. 실수 연산에서의 자동 타입 변환, + 연산에서의 문자열 자동 타입 변환, 문자열을 기본 타입으로 강제 타입 변환 1. 실수 연산에서의 자동 타입 변환 실수 타입의 기본형은 double 이다. 따라서 산술 연산식에서 실수 연산이 이루어지면 double 타입으로 자동 타입 변환되어 사용된다. (설령 int 타입 등과 혼합으로 계산이 되어도) 만약 정수 타입으로 연산이 반드시 필요하면, double 타입을 강제로 int로 변환해야 한다. 자바에서 소문자 또는 대문자 F가 없는 실수 리터럴을 double 타입으로 해석한다. 따라서 실수 리터럴 등을 연산한 뒤에 float 타입에 저장하면 컴파일 에러가 발생한다. 위 사진을 보면 중요한 부분을 시사 한다. 방법 1 의 경우 0을 얻는다. 왜냐면 서순…

March 20, 2024
til
java
kotlin 컴파일 과정을 알아보자

kotlin이란? 자바 언어를 기반으로, JVM 위에서 동작하는 새로운 프로그래밍 언어이다. intelliJ IDE 로 유명한 JetBrains에서 개발되었다. 웹 프론트, 서버 백 앤드, 안드로이드 네이티브 프로그램을 작성 가능하며, 아직 불완전하지만 Kotlin native 를 통해 JVM없이 실행 가능한 단일 실행 프로그램도 만들 수 있는 언어이다. 2010년 첫 버전이 등장한 이후로 지속적인 개선과 지원으로 많은 개발자들에게 관심을 받게 된다. 특히나 안드로이드 개발 면에서 자바 6에 대한 갈증을 해소하는 영역에서 많이 쓰인다. 2017년에는 구글 I/O에서 정식으로 코틀린을 안드로이드 개발 언어로 채택하게 되면서 더더욱 성장하는 중인 언어이다. kotlin은 무슨 특징을 갖고 있을까? Null 안전성 : kotlin 의 유형 시스템은 null 참조가 역참조 되는 것을 방지한다. 확장 기능 : kotlin을 사용하면 클래스에서 상속하지 않고도 새로운 기능으로 클래스를 확장…

March 20, 2024
study
java
영어 단어 모음 - 2024.03 - 3rd

2024년 3월 3주차 2024-03-18 2024-03-19 2024-03-20 2024-03-21 2024-03-22 2024년 3월 3주차 2024-03-18 2024-03-19 2024-03-20 2024-03-21 2024-03-22

March 19, 2024
study
CSAPP-2024-03-2주차-정리

2024년 3월 3주차 Integer Representations 음수가 아닌 숫자만을 표현할 수 있는 방법이고, 다른 하나는 음수, 영, 양수 모두 표현하는 방법을 배우는 챕터이다.이 챕터에서는 수학적 성질과 기계 수준 구현 모두에서의 특징을 살필 것이다. 더불어 인코딩된 정수를 다른 길이의 표현으로 확장하거나 축소했을 때의 영향도 같이 확인할 예정이다. 2.2.1 Integral Data Types C 언어는 ASCII 기반으로 32, 64비트 프로그램에 대해 가질 수 있는 숫자의 범위를 갖고 있다. 여기서 알아둬야 할 핵심은 범위가 대칭이 아니라는 점이다. 바이트에 데이터를 넣어 표현하는 특성 상 음수 범위는 양수 범위보다 하나 더 넓다. 2.2.2 Unsigned Encodings 부호에 대한 표시 없이 비트 백터들은 각 자리를 통해 값을 표현할 수 있다. 이는 딱히 어려울 것이 없이 우리가 상식적으로 아는 형태 그대로라고 보면 된다. 2.2.3 Two’s-Complem…

March 19, 2024
study
cote ) til - 20240319

실패율 실패율 failture_rate1.png 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.…

March 19, 2024
til
algorithm
cote ) til - 20240318

비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 인 정사각형 배열 형태로, 각 칸은 “공백”(” ”) 또는 “벽”(”#”) 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 “지도 1”과 “지도 2”라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. “지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 , 공백 부분을 으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. secret map 네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의…

March 18, 2024
til
algorithm
cote) til - 20240318

part2. 알고리즘 유형 분석 - DFS, BFS, 백트레킹 그래프 자료구조 Graph Vertex(= node) edge 방향성 무방향 그래프 (= 양방향 그래프) 방향 그래프 순환 여부 순환 그래프(Cyclic Graph) 비순환 그래프(Acyclic Graph) 연결요소 Connected Component 정점 연결선(간선) 트리 자료구조(tree) 순환성이 없는 무방향 그래프 형태 트리는 특정하지 않는 한 어떤 노드이든 루트root 가 될 수 있다. 가장 바깥쪽 노드는 리프 노드 leaf node 라고 한다. node A에서 B로 가는 경로는 반드시 존재 하며 유일하다. (반드시 1개 존재) 노드개수 = 간선 개수 + 1 전산적으로 사용되는 구조에서는 이런 특징을 가진다. 자료구조에서의 트리는 부모 -> 자식 관계가 있는 방향 그래프이다. 루트 root 는 하나다 코드로 그래프를 나타내는 방법 1. 인접행렬 방향성이 있는 경우 같은 짝일 때 비대칭 구조가 되지만, …

March 18, 2024
til
algorithm
JavaScript 컴파일 과정을 알아보자

자바스크립트 자바 스크립트의 개요 JavaScript 는 가벼운 인터프리터 혹은 JIT 컴파일 프로그래밍 언어로 보통 웹 페이질를 위한 스크립트 언어로 알려져 있지만, 자바 런타임 엔진을 통해 비브라우저 환경에서 동작하기도 하는 프로그래밍 언어이다. 기본적으로 프로토타입 기반, 다중 패러다임, 단일 스레드, 동적 언어로 객체지향형, 명령형, 선언형 스타일을 지원한다. JS의 표준은 ECMAScript 언어 사양(ECMA-262) 와 국제화 API 사양(ECMA-402) 이다. JS의 역사 1993년 PC의 보급이 시작되던 시절, 네트워크 환경에서의 컴퓨터를 잘 모르는 사람도 쉽게 사용이 가능한 UI 요소가 가미된 브라우저 Mosaic Web Browser가 출시하게 된다. Marc Andreessen이 최초로 만든 브라우저였다. 네트워크 세상이 열리고, 그는 기존의 노하우를 살려 Netscape 라는 회사를 설립하고, 94년도에 이르러선 좀더 UI를 다듬고 Netscape N…

March 18, 2024
study
js
java 컴파일 과정을 알아보자

자바의 역사 1990년대, Sun Microsystems 에서 개발되었다. 당시 엔지니어 부서 중 하나인 ‘Green Team’은 이제 곧 소비자 개개인의 물건에 컴퓨터가 있는 시대를 예감하여, 이를 위한 새로운 언어 개발을 착수한다. 이때 Green Team 의 깃에서 greentalk 라고 부르다가, 이름을 라고 짓게된다. 모바일 기기라는 개념조차 부족하던 시대 가전제품에 칩을 탑재할 용도로 언어가 만들어졌으나, 이 아이디어 자체가 시대를 너무 앞섰다. 당시 하드웨어가 구동 될만한 성능이 되지 못해 성공하지 못하였으나, 웹 애플리케이션에 적합한 언어로 되었고 1955년 Java 1.0 으로 세상에 나오게 된다. 상당히 오랜시간 썬에서 업데이트 해왔으나 2010년 오라클에 인수되었다. 일부 오라클의 유료화 선언 등으로 논란이 있었으나, 결론적으로 자바는 무료로 사용할 수 있다. 인터프리터와 컴파일러 컴퓨터는 기계어, 즉 0, 1로 구성된 binary 데이터를 읽어낸다. 그러나 …

March 18, 2024
study
java
java) til - 20240315

TIL of Java Spring 본 내용은 Udemy를 통한 학습 내용이다. 복습 및 완벽 정리가 아닌, 핵심이나 놓치지 말 것들 위주의 정리인 만큼, 내용이 온전히 담기진 않는다. 09강. 실수 타입, 논리 타입, 변수의 참조 타입, String 클래스, Object클래스, toString(), 이스케이문자 왜 뒤에 f 등을 붙여서 실수를 표현하는가? 컴파일러에게 float 타입임을 알리기 위함 정밀도 면에서 float보단 당연히 double 이 정밀도가 높다 C언어에서는 논리타입은 존재하지 않는다(0, 1이를 대신함) 자바 타입은 참과 거짓을 의미하는 true, false를 논리 리터럴로 사용한다. (1byte) 자바의 참조타입(String, Object… etc) String 은 클래스 타입이며, 기본타입이 아닌 참조 타입임. 자바의 클래스의 최고 종상 클래스는 Object 클래스를 상속 받는다 기본적으로 참조 타입의 구조는 stack 에 heap에 생성되는 데이터의 주소값…

March 15, 2024
til
java
docker-kubernetes ) til - 20240315

kubernetes 가 정확히 무엇인가? 쿠버네티스는 기존 강의에서 언급한 수동으로 배포 및 웹 프로바이더들에 제약이 되는 등의 문제를 개선하는, 어떤 웹 클라우드 서비스에서도 독립적으로 구축이 가능한 오픈소스 시스템이다. 컨테이너 배포 관리, 컨테이너 오케스트레이션 가능, 자동 배포, 스케일링, 로드 밸런싱, 배포나 관리 등을 전반적으로 도와준다. 특히, 컨테이너를 모니터링하다, 다운이 되면 자동으로 교체하는 등에서 도움이 된다. kubernetes configuration 만 작성하면 쉽게 구성이 가능하다. 더불어 특정 도구로 클라우드나 어떤 머신이든 해당 속성으로 자동으로 배포 및 설정을 가능케 해준다.(즉 표준일 뿐 아니라 도커-컴포즈에서 좀더 확장되어 서버 전체를 설정, 관리 정책을 담은 일종의 통합 도구인 셈이다.) 여기에 더 나아가서 혹여 특수한 클라우드 프로바이더들 사이에 옵션을 추가하면, 해당 클라우드 프로바이더에 특화도 가능하며, 반대로 다른 클라우드에서 사용시 …

March 15, 2024
til
backend
cote) til - 20240315

part 2. 알고리즘 유형 분석 - 탐욕법 Greedy Algorithm 1 탐욕법 Greedy Algorithm 매 순간마다 최선의 경우만 골라서 선택하는 방식의 알고리즘 다른 경우는 고려하지 않고, 나중은 생각하지 않는다. 모든 경우를 다 보진 않아서, 완전탐색 알고리즘 보단 빠르다 어떤 경우가 최선인지 찾아야 하고, 규칙성을 발견하는게 포인트 당연한 말이지만 그렇다고 완벽하게 이상적인건 아니니 주의 2 동전 거스름돈 문제 A : 10, 50, 100, 500원 동전을 무한하게 갖고 있다. 손님에게 800원을 거슬러주려고 할 때 동전을 최소한으로 주는 방법은? 큰 단위부터 우선적으로 주는게 가장 효과적~ B: 만약 100, 400, 500원 동전을 무한하게 갖는경우? 400원짜리 2개 주는게 이득임(그리드로 풀수 없는 반례) 이러한 경우가 발생하는 이유는 A는 단위가 배수관계로 증대됨, B는 그렇지 않음. 배수의 관계로 B에서는 500원만으로 400원짜리 기준으로 만드는걸 만…

March 15, 2024
til
algorithm
cote) til - 20240314

part 2. 알고리즘 유형 분석 - 완전탐색 Chapter 2. 완전탐색 - 브루트포스 완전탐색 장점 : 모든 경로를 본다 = 결국 답을 발견한다. 단점 : 모든 경로를 본다 = 리소스를 많이 먹고, 모든 연산을 끝내야만 한 브루트 포스 Brute-force (무차별 대입) 모든 경우의 수를 다 넣어 답을 맞추는 방식 무식하지만 확실히 쓰인다. 암호학, 수학 등 학계에서나 ProblemSolving(PS)에서도 널리쓰인다. 우선 이 방식으로 답을 찾고 최적화하는 방법을 쓰기도 한다. Chapter 2. 완전탐색 - 예제문제(1) 그냥 완전탐색으로 값을 구할 수 있다. 하지만 그냥 하게 된다고 하면 입력의 값의 크기로 인해 1초라는 시간 안에 해결이 안됨. () 고려해 볼 만한 방법 정렬을 사용해 본다. : 보통 의 시간 복잡도가 소요됨 가장 큰 값이 들어올 때마다 기록하고, 모든 입력이 마무리 되면 더한다 : 의 시간복잡도가 예상된다. Chapter 2. 완전탐색 - 순열 …

March 14, 2024
til
algorithm
[BTBP] 취업을 위한, 동시에 내 실력을 위한 기술블로그 풀 스크레치 프로젝트를 구상해보자

만들어보자 내가 직접 만드는 블로그 나의 기술 블로그를 만든다. 그러나 여기서 풀스택으로 준비를 해보도록 하며, 우선 백엔드 개발 이후 프론트 쪽을 공부하면서 학습한 내용을 기반으로 개발을 진행해본다. 장기 프로젝트로 생각하고 좀 천천히 진행하면 좋을 듯, 대신 기본적으로 해본 것들은 강화시키고, 안 해본걸 먼저 구현해보는 것을 핵심으로 삼았으면 한다. 백엔드 쪽은 아름다운 설계를 추구하고 설계를 해보도록 노력해보자. SOLID 원칙을 지키면서 간단하게 구현해보자. 프론트는 구현 자체에 집중하는 구조를 하되, 프론트엔드에서 사용되는 주요 기술을 아는게 중요할 것 같기도 하다. 필수 기능들은? 내가 로그인해서 쉽게 사용이 글 작업이 가능해야 한다. oAuth 문서 작업이 가능한 기능들로 구현하고 싶은데, 좀 더 유연하게 글 쓸 수 있으면 좋겠다. 문서기능 썸네일 미리보기 기능 댓글 기능 게시판 형태 기능 게시판 추가 게시판 삭제 게시판 수정 글에서 이미지 최적화 기능 최대한 빨리 이…

March 13, 2024
project
cote) til - 20240313

part 2. 알고리즘 유형 분석 - 자료구조 Chapter 1. 자료구조 - 배열, 벡터, 연결리스트 배열 Array 삽입 / 삭제 : O(N) - 삽입이나 삭제는 결국 내부 데이터를 옮기거나 하므로 최악의 경우를 상정하여 속도가 설정됨. 탐색 : O(1) - 메모리 상의 위치를 계산해서 접근하므로 접근의 속도가 매우 빠른 것이다. C++에서 사이즈 변경 불가 / Python은 리스트를 사용 벡터 Vector 삽입 / 삭제 : O(N) 탐색 : O(1) 동적 배열 : 사이즈 수정 가능 연결 리스트 Linked List 삽입 / 삭제 : O(1) 탐색 : O(N) - 노드 구조다 보니, 삽입이나 삭제는 노드들의 주소값 연결만으로 해결되지만 탐색은 모든 노드를 찾아 다녀야 한다. 자주 쓰이는 구조는 아니지만 다른 자료 구조들을 구현할 때 많이 쓰인다. Chapter 1. 자료구조 - 스택, 큐 스택 Stack(파이썬은 그냥 리스트로…) 큐 Queue Chapter 1. 자료…

March 13, 2024
til
algorithm
도커-쿠버네티스) til - 20240312

색션 11. Kubernetes 시작하기 모듈 소개 도커 컨테이너 배포 섹션에서 도커 컨테이너를 배포하는 방법은 배웠음 쿠버네티스란 실제로는 도구라기 보단 프레임워크, 개념 모음, 표준 이라고 할 수 있다. 모듈 컨텐츠 컨테이너 배포를 할 때 생기는 문제 이해하기 쿠버네티스가 무엇이며 왜 써야 하는가? 쿠버네티스의 개념과 컴포넌트들 수동 배포의 더 많은 문제점들 쿠버네티스 공식 사이트를 찾아보면 쿠버네티스에 대하여 “Kuberneetes is an open-source system for automating deployment, scaling, and management of containerized applications” 라고 부른다. 이를 통해 알 수 있는 것은 쿠버네티스가 단일 소프트웨어가 아닌 시스템이란 점이다. 컨테이너 배포에 도움이 되는 일체를 갖고 있다는 것을 알 수 있다. 우리는 아마도 문제 상황에 직면하게 된다. 컨테이너를 수동으로 배포하는 것에 대해 생각해보자.…

March 12, 2024
til
backend
cote) til - 20240312

part 0. 소개 강의 안내 강의 진행 언어 : python 가끔 C++ 섞을 예정 강의 구성 소개 part 1. 코딩테스트 준비 어떻게 해야 하나요 1. 코딩테스트란 2. 코딩 테스트 출제 경향 3. 코딩 테스트 채점 기준 4. 문제 해결 시작하기 part 2. 알고리즘 유형 분석 1. 자료구조 2. 완전탐색 3. 탐욕법 4. DFS, BFS, 백트래킹 5. 이분 탐색 6. 동적 계획법 part 1. 코딩 테스트 준비 어떻게 해야 하나요? chapter 1. 코딩테스트란? 온라인 저지를 꾸준하게 활용하는게 당연히 좋다. 본 강의는 백준을 주로 활용한다. << 나도 꾸준하게 풀긴 해야함 언어 고르기 무슨 언어로 문제를 풀어야 하는가? 3대장 : C++, java, python 본 강의는 파이썬 위주 진로가 확고하면 해당 언어로 연습하는 것이 좋다. 단, 마이너한 언어를 쓰면 문제 해결 시 난감할 수 있다. 기업 코텍에서는 언어 특성 차이로 인한 이슈는 없도록 내는 편 IT 기업들…

March 12, 2024
til
algorithm
영어 단어 모음 - 2024.03 - 2nd

2024년 3월 2주차 2024-03-11 derivation : the origin of something, such as a word, from which another form has developed, or the new form itself intuition :Add to word list (knowledge from) an ability to understand or know something immediately based on your feelings rather than facts: 2024-03-12 verbose : using or containing more words than are necessary tedius : boring quotient : a particular degree or amount of something derives from something : to come from something vagaries : unexpected events…

March 11, 2024
study
자바 ) til - 20240304

TIL of Java Spring 본 내용은 Udemy를 통한 학습 내용이다. 복습 및 완벽 정리가 아닌, 핵심이나 놓치지 말 것들 위주의 정리인 만큼, 내용이 온전히 담기진 않는다. 08강 변수의 기본 타입 - 실수, 논리, 변수의 참조 타입, 이스케이프 문자 기억할 것들 실수 타입 자바는 기본적으로 실수 리터럴을 double로 해석하고 double타입 변수에 저장해야 한다. 위에 말은 반대로 말하면 실수를 float 에 저장시 컴파일 에러를 발생시킨다. 따라서 이를 해소하려면 숫자 뒤에 f, F 를 붙여야 한다. 이때 float , double 각 타입은 허용되는 최대 소숫점 이하 자리가 각 17, 15자리이다. 또한 정밀도는 double이 float 대비 2배 정도 좋은 편이다. 기본타입인 경우 자바여도 동일하게 C와 유사하게 동작하며, 기본타입이 아닌 것들이 전부 참조 타입으로 동작한다. 생각해볼 것들 TIL of Java Spring 08강 변수의 기본 타입 - 실수, 논…

March 04, 2024
til
java
CSAPP-2024-03-2주차-정리

2024년 3월 2주차 Chapter 2 Representing and Manipulating Information 현대 컴퓨터는 이진 신호를 사용해 정보를 저장하고 처리한다. 이진수, 또는 비트는 디지털 혁명의 기반이며, 십진법에 비해 기계 설계에 더 적합하다. 단일 비트는 제한된 정보만을 표현하지만, 비트를 그룹화하고 의미를 부여함으로써 다양한 데이터를 인코딩할 수 있다. 이 장에서는 이진수 시스템, 표준 문자 코드, 음수 및 실수 표현을 포함한 여러 인코딩 방식을 다룬다. 이를 통해 컴퓨터는 숫자, 문자, 실수 등을 효율적으로 표현할 수 있다. 숫자의 컴퓨터 표현에는 부호 없는 인코딩, 2의 보수 인코딩, 부동 소수점 인코딩 등 세 가지 주요 방식이 있다. 이들은 각각 0 이상의 수, 정수, 실수를 표현하는 데 사용된다. 컴퓨터는 제한된 비트 수를 사용해 숫자를 인코딩하기 때문에, 일부 연산 결과는 오버플로우를 경험할 수 있다. 현대 컴퓨터는 예상과 다른 결과를 낼 수 있지만…

March 04, 2024
study
영어 단어 모음 - 2024.02 - 4th

2024년 2월 4주차 2024-02-29 delve into : to search in order to find a thing or information: colloquially : informally and in a way that is more suitable for use in speech than in writing: Colloquially referred to as a “brain attack”, a stroke occurs when the flow of blood to the brain is interrupted. Jardine writes clearly and colloquially for the non-academic reader. pervade : When qualities, characteristics, or smells pervade a place or thing, they spread through it and are present in every part …

February 29, 2024
study
CSAPP-2024-02-4주차-정리

2024년 2월 4주차 Preface 본 교재는 다양한 컴퓨터와 관련된 다양한 분야들을 프로그래머의 관점에서 통합된 시각으로 바라봅니다. Assumptions about the Reader’s Background 이 책은 x86-64 기계어로 실행되는 시스템에 주목하고, 특히 Unix 기반의 Linux OS 상에서 동작하는 C 프로그램들이 어떻게 동작하는 지를 고려할 것이다. 알잘딱하게 C 언어로 동작하며, GNU 기반으로 컴파일 된 프로그램들이 예시로 쓰일거니 알아서 잘 신경 쓸 것! How to Read the Book 예시가 되는 것들의 레이팅은 이 정도 느낌이다. Book Overview 작자 의도를 그대로 담기위해 직역만 진행한다. Chapter 1 : A Tour of Computer Systems. 컴퓨터 시스템에 대한 여행. 이 장은 간단한 “hello, world” 프로그램의 생명 주기를 추적함으로써 컴퓨터 시스템에서의 주요 아이디어와 테마를 소개합니다. Chap…

February 29, 2024
study
CSAPP 주말반 학습 방법 정리

CSAPP…! 드디어 진행한다. 복습 겸 해서 정리하는 만큼 어떻게 정리하면 좋을지 잘 정리해보고자 한다…! 팀 스터디, 기존의 방식은 잘 유지 : 설명하고, 내용정리한 것들을 논의할 수 있도록 유지할 것 그렇다면 복습은 어떻게? 세팅 레이아웃 ChatGPT : 해석 + 간단한 검증용 캐임브릿지 영영 사전 알PDF : 주석 작성용 작성 옵시디언 : 실제 글 쓰기 장소 기술블로그 데모 : 문서 문제 발생 확인용 전체를 다 기재하는 방법은 기존에도 했지만 너무 많다. 내용 정리가 쉽지 않다. 가능하면 정독(소리내어 읽기) 위주 + 기억할 사항만 메모할 것 모르는 영어 단어들은 한 주 단위로 묶어서 작업 진행하기(일주일치 학습 사항을 정리하기) 토론 준비는 어떻게? 토론 준비를 위한 아이디어는 정리되는 문서 별로 진행 하단부에 이것저것 적으면서, 아이디어를 모으고 이를 그 다음주 분량에서 진행 금주 연구해야하는 주제는 가능하면 20-30분 할애를 매일 진행해보기 금주 토론 주제에 대해…

February 28, 2024
study
[peer] 피어 개발 이야기 (2) - 개발 단계

개발 단계 개발 초기 개발 중기 개발 후기 런칭 본문 개발 단계 개발 초기 개발 중기 개발 후기 런칭

February 23, 2024
project
]peer] 피어 개발 이야기 (1) - 준비 단계

Peer 프로젝트, 전반부 마무리, 다음을 고민하기 전에 정리해보자 본 글은 프로젝트의 전체 과정을 정리하고자 쓰여진 글이다. 그렇기에 정확하게 기억을 하고, 프로젝트를 설명 할 때의 기초가 되도록 하기 위해서이다. 앞으로의 프로젝트는 다른 방향성을 가질 지도 모르지만, 반성과 성장은 언젠가 도움이 될거니깐! 다소 딱딱하고 재미없는 글이지만, 남을 위한 글이 아니라 나를 위한 글이라는 점 양해 바란다. 구성 단계 피어의 시작은 심플한 기획과 함께 했다. 동료 학습, 협업, 이걸 위한 커뮤니티가 피어의 주인장이 가지고 있는 생각이었다. 스케일 업을 하고 싶었고 커뮤니티화 되는 것을 보고 싶다고 생각했다. 그렇다면 유저는 확대 재생산 될 수 있어야 하며 커뮤니티는 생동력이 있어야 한다는 본질적인 행동을 유도해야 했다. 그렇다면 필요한 게 뭔가를 고민했다. 결론은 심플했다. 팀업이 재생산 될 원초적 심리는 뭘까. 프로젝트, 스터디를 같이 하는 이유를 극대화시켜야 한다는 생각에 집중하게 …

February 23, 2024
project
피어를 일단락 지으면서 2부를 계획해보자

피어 드디어 끝나나?! 길고 긴 런칭의 딜레이 피어의 작업이 딜레이되었다. 그도 그럴 것이다. 욕심에 비하면 구조도 복잡하고 내용도 많다. 아무리 내가 관리를 하고 문서화에 힘을 쏟자고 해도, 이것에 공감하지 못하는 이들과 함께 지키지 못할 약속을 만들어 긁어 부스럼을 만들어도 문제가 있다. 할 수 있는 일을 제대로 하는 게 오히려 현명한 것이라고 생각했기에 그럼에도 끌고 갔고 그 결과가 이 정도의 결론이 아닐가 싶다. 뭐 여하 간에 결국 여기까지 왔다. 누더기에 가까울진 몰라도, 최소한 어디가서 욕먹지 않을 퀄리티를 만들어 낼 수 있었다. 예상보다 프론트의 작업량이 많아서 깜짝 놀랐고, 동시에 관심을 안 가지면 얼마나 비 체계적으로 작업하는지 새삼 볼 수 있던(…) 부분도 있었다. 그래도 이게 어디야. 여기까지 따라온 것만 보더라도 엄청난 결과라고 생각이 든다. 드디어 끝나나? 내일, 즉 수요일 드디어 런칭을 한다. 내가 볼 땐 오후 2시 런칭은 무리일 거고 (ㅋㅋ), 아마 4시…

February 13, 2024
etc
[peer] 피어 알림 시스템 구축을 위한 고민 정리

Next Peer 를 위한 고민 : 시작 피어 웹 서비스의 구현의 목적은 총 3단계로 구성되어 있다. 기획의 핵심은 순환이다. 프로젝트, 스터디의 핵심은 결국 계속해서 타인과 타인 사이에서도 남아야 하며, 만드는 사람들은 목적을 쉽게 달성하며, 동시에 쉽게 자기나 자신의 결과물을 잘 보이는게 핵심이다. 그걸 위해 시작하는 모집글 작성에서 시작하여 협업을 위한 허브 역할의 팀 페이지와 게시판, 쪽지, 그리고 최종적으로 쇼케이스나 피어로그와 같은 것들이 협업의 과정에서의 순환과 결과물의 공유와 강조 등을 포함한다. 그런 전체 목표 중에 다음 주 중에 공개될 피어 웹 어플리케이션은 대략 2.3~4 단계정도의 진행 정도를 보여준다. 핵심적인 기획은 아직 적용이 안되어 있으며, 특히나 프론트의 딜레이와 버기한 상황들은 앞으로 해당 내용의 확장, 혹은 진화에 조금 더 시간이 걸릴 것으로 보인다. 어쨌든 프론트의 딜레이와 보안을 하려고 하다보니 시간이 남게 되었고, 덕분에 조금 더 백엔드 구…

February 09, 2024
backend
project
2024년 피어 런칭을 앞두고 적어보는 몇 가지 개인적인 이야기

피어 개발 런칭 앞으로 4일 남았다. 떨리나? 그렇게 떨리진 않다. 사실 오늘은 뭔가 생각의 정리가 필요하다고 생각하는 부분들이 많이 있었기에, 그저 새벽, 자기 직전 피곤한 몸을 이끌고 정리의 글, 그리고 최근까지 있었던 일들을 정리해보고자 한다. 가장 큰 것은 역시 peer 정말 오래 걸렸다. 기획을 해보고 싶었던 내가 온전하게 한 사이클을 마무리 짓기까지 앞으로 4일이 남았다. 2월 5일 런칭을 하게 되면 베타로써 한동안 운영될 것이다. 사실 매우 아쉽다. 부족했다고 본다. 기술적 상상력이 완성되기엔 좀 더 시간이 필요 했다. 정확히는 최악의 경우가 발생했을 때, 그것을 어디까지 사람들은 해결할 수 있는가? 에 대해 예상을 실패했다고 보는 게 맞으리라 생각된다. 어플리케이션 수준으로 복잡성을 해결하고, 동시에 프론트에 대한 내 개념 수준이 부족하다보니, 백앤드는 어떻게든 해결해 나갈 수 있었지만 프론트는 그럴 수 없었다. 뿐만 아니라 기존의 기획만 집중하던 시기의 문제가 있었…

February 01, 2024
etc
개발자 영어 - 16

Introduce 본 내용은 Udemy를 통해 학습한 내용중 기억할 사항들을 정리한 내용들이다. 영어로 주석 제대로 달기 코드 주석 코드 주석의 목적 : 이해를 돕는 역할, 코드 수행하면서 머리 속에 정보를 정리 한다. 주의 나쁜 코드에 주석을 달지 말고 새로 짜라 - 브라이언 W. 커니핸, P.L. 플라우거 주석은 오래될 수록 코드에서 멀어진다. 따라서 잡음은 줄이고 의도는 명확하게 해야 한다. 당연한 것은 배제하고, 정말 필요한 것만을 남겨야 한다. 애초에 주석으로 설명할게 아니라 애초에 메소드의 명, 변수 명을 활용하여 주석 대신 설명할 수 있는게 낫다. 설명하지 말아야 할 내용 코드만 보면 누구나 알 수 있는 내용 나쁜 함수/ 변수명을 설명하려는 내용 설명하면 좋은 내용 코드가 특정 방식으로 작성된 이유 코드에 담긴 결함이나 향후 할 일 어떤 상수가 특정 값으로 정해진 이유 평범한 사람이 예상치 못한 특이한 동작 파일/클래스 수준에서 큰 그림을 설명하는 주석 코드 문서화 J…

January 04, 2024
til
2024년은 어떤 해가 될까?

고민, 고민, 고민을 하자 웰컴 투 2024..! 출처 : 코코네 공방(링크) 야심한 새벽, 물론 야근을 하면 안되지만! 오늘은 밀린 작업들을 쳐내기 위해 야근을 스스로 선택했다. 증말, 과연 프로젝트는 언제 쯤 끝날 수 있는 걸까. 막바지라고 막바지라고 그렇게 이야기 했지만, 이 정도를 구현하는 것도 사람이 많으면 정말 어렵다. 오히려 혼자 했다면 더 빨리 끝났으려나? 그래도 정말 많은 인원과 친해졌고, 같이 개발하는 것이 자연스러워졌다. 논의하는 과정은 분명 즐거움이 있었기에, 2024년을 맞이하고, 2월 1일 런칭을 확정하겠다고 오기까지 정말 긴 시간이 걸린 게 아닌가 다소 생각해본다. 그렇다면 2024년, 이제 1달의 달림 이후에는 다시 나만의 시간이 될 것이다. 물론 완벽하진 않다. 여전히 피어 관리는 해야할 것이고, 대빵이 어떤 생각을 하냐에 따라 개발을 지속할 수도 걍 관리만 해 줄수도 있으리라 생각된다. 어떤 방향이 되었든, 조금의 여유가 생기고 그걸 다시 다음 목…

January 02, 2024
etc
자바) til - 202401020949

TIL of Java Spring 본 내용은 Udemy를 통한 학습 내용이다. 복습 및 완벽 정리가 아닌, 핵심이나 놓치지 말 것들 위주의 정리인 만큼, 내용이 온전히 담기진 않는다. 05 강 변수 선언, 초기화, 사용, 값을 바꾸는 방법, 주석의 의미, main()의 개념, … 기억할 것들 클래스 명은 가능하면 대문자로 시작해라 main()은 프로그램의 시작점 변수의 사용에 있어 반드시 초기화가 원칙 -> 실제 사용시 @Builder 를 통해 필요 없을 수 있는데, 더 자세히 이부분에 대해 이해해야 할 것 같다. 생각들 딱히 아직은 기초 내용을 복습하는거라 크게 문제는 없기도 하고 궁금한 사항들은 적은 것 같다. 계속 빠르게 복습하고 훑어야지… TIL of Java Spring 05 강 변수 선언, 초기화, 사용, 값을 바꾸는 방법, 주석의 의미, main()의 개념, … 기억할 것들 생각들

January 02, 2024
til
java
개발자 영어 - 13 ~ 15

Introduce 본 내용은 Udemy를 통해 학습한 내용중 기억할 사항들을 정리한 내용들이다. 13. 도입 코드 변수명과 주석의 연관성은? 물론 주석을 통해 정리할 수 있지만 변수명을 통해 오히려 주석을 적지 않아도 비즈니스 로직을 구체화 할 수 있다. 커밋 메시지의 중요성 바람직하게 커밋 메시지를 적어두면, 문제가 발생했을 때의 해결이 쉬워진다. 14.프로그래밍 과정에서 이름짓기와 관련된 심리학 여기서 다룰 내용 프로그래밍 과정에서 이름 짓기와 관련된 심리학 프로그램 개발 과정에서 영어로 이름 짓기 영어로 주석 제대로 달기 영어로 커밋 메시지 제대로 만들기 영어로 오류 메시지 제대로 만들기 이름의 중요성 스트루프 효과 [!스트루프 효과] 스트루프 효과 스트루프 효과는 심리학에서 널리 알려진 현상으로, 인간의 지각과 반응 사이에 발생하는 간섭을 설명합니다. 이 현상의 핵심은 다음과 같습니다: 색상과 단어의 불일치: 스트루프 효과는 특히 단어의 색상이 그 단어의 의미와 일치하지 않…

January 02, 2024
til
2024년을 생각하며.

기 오늘 하루 너무 무료하게 시간을 보냈다. 의욕이고 뭐고 없는 상황. 어디까지 가야 할까. 어디까지 해야 할 까. 20대의 마지막 도전의 시간은 길어져 가고, 주변에서는 현재의 상황에 견디기 어려울 만큼 몰려 있다. 힘들거라고, 분명 이 악물고 달려가야 할 거라고 스스로도 알고 있었다. 하지만 뭔가, 여전히 부족한 느낌, 달려가야 하는데 아쉬운 느낌, 그리고 더불어 정말 힘들다는 생각이 머릿속을 스친다. 알고는 있었다. 슬슬 한계다. 돈이 없어서 , 능력이 부족하여서 사실 진작에 정신 차리고 현실에 대응하는게 맞았던게 아닌가 하는 생각이 조금, 머릿속 단편으로 스쳐 지나간다. 이걸로 테스트 한 번 더해보기..! 기

December 27, 2023
etc
크리스마스에 생각해보는 2023년

2023년 마지막 1주를 시작하며 2023년 드디어 마지막 주가 시작되었다. 정말 말이 안된다. 벌써 이렇게 시간이 흘렀다니. 내가 무엇을 하였는지, 하고 있는지, 정신없이 시간이 흘렀다. 정말 많은 일들이 겹치고 겹쳐 정신이 없었는데, 정신 차리고 보니 2023년의 시간은 벌써 99%를 달성하고, 56주, 대망의 마지막 주간이 찾아왔다. 창밖의 흐린 하늘은 드디어 내 위치가 어디까지 왔고, 나의 시간대가 어딜 가리키고 있는지 자각할 만큼 차디찬 기준점을 알려준다. 2023년은 나에게 어떤 한 해였을까? 생각해보면 정신없이 달렸는데, 정말 고생했는데, 아직도 달려야 한다는 생각에 깨름찍하긴 하지만 정리를 좀 해보면 어떨까 한다. 🤪 2023년의 마무리, 42서울 42서울을 들어오게 된 것이 2022년 11월이었다. 그때의 나는 C언어 코드 조차 해석에 어려움을 쩔쩔매던 나였다. 지금은 자바 서버 개발과 아키텍쳐를 만지고 있다는 점에서 놀라운 성장이 아닐 수 없다. 이런 성장의 핵심…

December 25, 2023
etc
TIL_of_Network

TIL of Network 네트워크에 대한 이해도가 필요한 시점이 왔다고 생각했다. 백엔드 개발도 해보았고, 보안이나 연결도 얼추 해보았으나, 정작 네트워크에 대한 이해도가 높은지 애매했다. 그 와중에 이런 책을 발견하였다. 내용 구성이나, 이제는 읽어 볼 때 이해가 안되진 않을거란 생각이 들었고, 틈틈히 읽을 때마다 읽은 만큼 키워드를 저장 해 놓으려고 한다. 웹 정복은 한참 걸리겠지만…! 그래도 꾸준히 정리 해놓자. 1 네트워크는 어떻게 인터넷이 될까? 각 센터는 서로 직간접적으로 연결되어 있으며, 이러한 센터를 라고 부른다. 는 정보를 주고 받는 모든 네트워크 상의 기기들을 말하며, 노드의 공통점은 주소가 존재한다는 점이다.(IP) 네트워크를 걸쳐서 데이터를 전달해주는 중간 노드들 인터넷 트래픽을 구성하는 데이터 조각을 가리킨다. - : 는 네트워크 상에서 서비스를 제공하는 대상이며, 다른 노드로부터 정보를 전송 및 수신하여 사용하는 쪽 노드를 라고 부른다. …

December 18, 2023
til
사설 깃 서버 만들기 - Obsidian 다중 OS 동기화를 위한 처절한 몸부림

Intro 개발과정을 정리하는 도구로 나는 Obsidian 을 선택했다. 하지만 해당 도구는 매우 강력하지만 sync 기능을 유료로 제공해주었으며, 아이클라우드를 사용하는 기능도 있긴 하나, 이는 애플기기 한정으로 사용하기 용이했다. 하지만 반대로 말하면 애플 기기끼리는 쉬워도 멀티 OS 환경에서 동작하도록 구축하는 것은 쉽지 않았다. 기존의 개발환경이 맥 + 윈도우 였던 상황에서는 구글 드라이브를 활용해서 싱크가 가능했다. 하지만 리눅스로 개발 데스크탑 환경을 바꾸게 되면서 정상적인 사용이 어려웠다. linux 용 구글 드라이브 패키지가 있긴 했지만 불안정하고 사용이 어려웠으며, 무엇보다 미러링 방식으로 내장되는 구조가 아닌, FTP 서버 처럼 그때 그때 데이터를 가져오는 구조였다. 따라서 옵시디언을 활용하기에 매우 곤란하다. 사실 그런 점에서 해결하기 가장 쉬운 방법은 역시 gitHub 같은 곳을 사용하는 것이다. 언제 어디서든 사용이 가능하며, 깃헙의 레포지터리를 사용하는데 …

December 05, 2023
etc
초월자가 되는 방법, 42서울 마지막 공통과제 후기

초월자(Transcendence) 가 되기 위한 길 고수가 되는 길은 참 멀고도 험하다. 어떤 분야가 아무리 사소해도 결국 완성이라는 수준이 있다면 거길 도달하기 위해선, 신기하게도 어떤 ‘통달’이라는 특정한 수준 이상의 연마가 필요하다. 여러 미디어나 영화 속 백발의 고수가, 청년의 시절 웃통을 까고 기본기를 연습하는 그런 땀내 나는 느낌. 그런 통과 의례가 없다면 고수라는 말 붙이기가 쉽지 않을 것 같다. 옛날에 이런 짤이 있었지… 42서울의 과제에서도 그런 과제가 있다. 기존의 지옥 같은 고통 속에 몸부림을 쳤어도, 비교도 안될 만큼 양과 비교도 안될 만큼의 깊이를 가지는 과제. 물론, 그것이 끝인가? 아니다. 어쩌면 개발의 진짜 입구에 초대를 받은 것이라고 봐도 과언이 아닌 과제. 그것이 바로 라는 과제이다. 무슨 과제인가? 본 과제는 크게는 다음과 같은 내용을 담고 있다. TypeScript 를 배우고, 프론트엔드 웹을 구축하라. 반드시 의 형태를 띄어야한다. Type…

December 05, 2023
42seoul
NHN Cloud Basic Essential 교육 후기

NHN Cloud 백엔드, 즉 서버-클라이어트 형태를 구축하는데는 여러가지 방법이 있다. 한창 배우고 있는 상황에서 프로젝트 진행을 위해 해 나아가는 과정 속에서 드디어 개발되어가는 프로젝트를 어딘가에 올려야 할 상황이 왔다. 여러가지 고민의 결과 끝에 AWS 라는 아주 메인스트림도 존재하지만, nhn 클라우드 쪽도 큰 차이가 없이, 오히려 국내 서비스를 생각한다면 훨씬 이점도 있으리라 생각되어 nhn 클라우드를 활용해 보기로 했다. 그리고 우선적으로 컨테이너들을 올리면서, 프로젝트를 준비하던 도중 교육을 같이 들으면 어떨까?라는 팀원들의 이야기가 있었고, 결론적으로 제목처럼 Basic Essential 교육을 받을 수 있었다. 교육 소개 페이지 - 안은 생각보다 깨끗한걸? 새로산 아이폰이 화질이 아주 좋다…ㅋ 총원은 40명, 아침 9시 시작하여 18시까지라고 되어 있긴 했지만 그것보단 빠르게 끝났다. 아쉬웠던것은 실습을 위한 크레딧을 제공해주시다보니, 인원수 이상으로 수업 참…

October 18, 2023
etc
OSTEP - Part 3. Persistency - 50

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 50. Andrew 파일 시스템(AFS) 50. Andrew 파일 시스템(AFS)

July 02, 2023
study
OSTEP - Part 3. Persistency - 49

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 49. Sun 사의 네트워크 파일 시스템 49. Sun 사의 네트워크 파일 시스템

July 02, 2023
study
OSTEP - Part 3. Persistency - 48

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 48. 분산 시스템 48. 분산 시스템

July 02, 2023
study
OSTEP - Part 3. Persistency - 45

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 45. 데이터 무결성과 보호 45. 데이터 무결성과 보호

July 02, 2023
study
OSTEP - Part 3. Persistency - 44

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 44 플래시 기반의 SSD 44.1 하나의 비트를 저장하기 44.2 비트에서 뱅크와 플레인으로 44.3 기본 플래시 작업 44.4 플래시 성능과 신뢰성 44.5 플래시에서 플래시 기반 SSD로 44.6 FTL 구성: 잘못된 접근 44.7 로그 기반 FTL 44.8 가비지 회수 작업 44.9 맵핑 테이블의 크기 44.10 마모도 평준화 44.11 SSD의 성능과 가격 44 플래시 기반의 SSD 44.1 하나의 비트를 저장하기 44.2 비트에서 뱅크와 플레인으로 44.3 기본 플래시 작업 44.4 플래시 성능과 신뢰성 44.5 플래시에서 플래시 기반 SSD로 44.6 FTL 구성: 잘못된 접근 44.7 로그 기반 FTL 44.8 가비지 회수 작업 44.9 맵핑 테이블의 크기 44.10 마모도 평준화 44.11 SSD의 성능과 가격

July 02, 2023
study
OSTEP - Part 3. Persistency - 43

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 43. 로그 기반 파일 시스템 1900년대 초반 Berkeley 대학에서 연구한 분들은 로그 기반 파일 시스템이라는 새로운 파일 시스템을 개발한다. 이러한 연구의 동기는 다음과 같은 이유 때문이다. 시스템 메모리 크기가 증가하는 추세였다 : 이러한 특징은 파일 시스템의 성능이 대체적으로 쓰기 성능에 의해 결정되었다. 임의 I/O와 순차 I/O의 성능 간격의 차가 크게 벌어졌다 : 하드 디스크 드라이브의 전송 대역폭은 꾸준히 증가해왔다. 반면 탐색, 회전 지연 비용은 그 발전 속도가 작았고, 디스크를 순차 접근만 할 수 있다면 탐색, 회전이 필요한 방식보다 큰 성능적 이득을 가질 수 있던 것이다. 대량의 일반적인 워크로드에서 기존 파일 시스템들은 성능이 좋지 않았다 : FFS는 블럭 하나의 크기의 새로운 파일을 생성하기 위해 여러번 쓰기를 해야 한다. 이렇듯 기존의 방식은 여러…

July 02, 2023
study
OSTEP - Part 3. Persistency - 42

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 42. 크래시 일관성: FSCK와 저널링 파일 시스템은 자신들의 기본 개념들을 구현하는데 필요한 각종 자료구조들을 관리한다. 여기엔 파일, 디렉터리 외에 메타 데이터 들이 포함된다. 여기서 핵심은 파일 시스템의 자료구조가 안전하게 저장되어야 한다는 점이다. 즉, 장시간 사용 후에도 유지되어야 하며 전력 손실에도 하드디스크나 플래시 기반 SSD 장치의 데이터는 손상없이 유지되어야 한다. 전력 손실이나 크래시 때문에 디스크 상의 자료 구조를 안전하게 갱신하는 것은 상당히 까다롭다. 파일 시스템은 크래시 일관성(crash-consistency)이라는 새로운 문제를 직면하게 된다. 해당 문제가 어떤 것인가, 예를 들어 특정 작업을 위해 디스크 상에서 두개의 자료구조 A, B를 갱신해야 한다고 생각하자. 디스크는 한번에 하나만 요청을 처리할 수있으므로, 하나의 요청이 먼저 디스크에 도…

May 14, 2023
study
Google app script 로 자동화 만들어보자 - (00)

Prologue 정말 놀라운 한 해의 연속. 여러 개인적인 일들이 터지고, 이를 수습하고, 정말 정신없이 올 초, 봄이 다 지나갔다. 공통과정 과제를 깨는 것도 일인데, 그와 함께 찾아오는 여러 개인적인 일들을 수습하다보니 peer 커뮤니티를 위해 무언가 한다는 것이 불가능했다. 그럼에도 다행이, 일들은 정신없이 지나감에도 어떻게든 대응을 할 수 있었다. 과제에 집중을 하면서 여러 경험들을 했고, 몸도 마음도 다져지는 기분이 드는 것은 기분탓이 아니었다. 그렇게 정신 차리니 4월이 되어 있었고, 어느 정도 일이 끝나자 내 앞에는 기존에 하던 일들에 대한 책임, 이제는 진짜로 이룰 수 있으리라- 라는 내 나름의 자신감이 생기게 되었었다. 기존에 피어 참여자들의 리워드 자동계산을 구현했었는데, 이를 개선하고자 했다. 피어를 위한 웹 서비스 구축을 진행해본다. 42서울의 개발 판도나, 개발에 대한 환경 자체를 좀 바꿀만한 플랫폼을 만들고 싶다. 1번의 경우 단순히 구글 스프레드 시트와 …

May 10, 2023
study
TIL_of_Spring_230507

TIL of Java Spring 본 내용은 JAVA 기초 학습 이후 백앤드 스프링 기초를 배우기 위해 김영한 교수님의 “스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술” 의 내용 중 기억할 내용들을 메모하는 포스팅이다. 백앤드.. 배우려면 열심히 해야지. 취업까지 한 고지다. 회원 관리 예제 - 백엔드 개발 회원 레포지터리 테스트 케이스 작성 main 메서드에서 실행하거나 웹 어플리케이션의 컨트롤러를 통해 기능 실행 여부를 판단이 가능하나 이는 시간도 걸리고 반복실행이 어렵다. 이에 자바는 이라는 프레임 워크로 테스트를 실행해서 이런 문제를 해결한다. 해당 방식이로 할 때 주의점은 전체 테스트를 돌릴 때, 과거의 테스트에 사용한 변수나, 데이터를 그대로 접근하게 되는 경우가 발생한다. 따라서 테스트가 하나 끝날 때 데이터를 초기화해주는 작업을 각 테스트별로 넣는게 용이하다. 해당 내용이 를 설정하는 것이다. 이렇게 테스트 케이스들을 전부 넣어서 tes…

May 07, 2023
til
java
OSTEP - Part 3. Persistency - 41

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 41. 지역성과 Fast File System 처음 Unix가 등장시 가장 기본적인 파일 시스템이 생기고, 이를 “오래된 UNIX 파일 시스템” 이라고 부른다. 이 구형 파일 시스템의 장점은 단순하다는 것이며, 파일 시스템의 가장 기본적인 개념인 파일과 디렉터리만을 제공한다. 가장 기본적인 개념인 파일과 디랙토라먼울 제공하며, 그 이전시기 사용되던 레코드 기반의 저장장소시스템과 비고하면 큰 발전을 이룩했다. 특히 유닉스 파일 시스템이 가지게 된 계층 구조의 디렉터리는 이전 시스템들이 사용했던 단일 계층 디렉터리 구조와 굉장한 차이를 보였다. 41.1 문제 : 낮은 성능 혁신적인 시스템을 구축하였으나 성능이 매우 안좋았고, 최초 시스템에 대한 측정 결과는 파일 시스템이 디스크의 대역폭에 2%밖에 활용하지못하는 결과를 보였다. 이렇게 느린 이유는 디스크를 시스템이 RAM 을 대…

April 29, 2023
study
TIL_of_Spring_230425

TIL of Java Spring 본 내용은 JAVA 기초 학습 이후 백앤드 스프링 기초를 배우기 위해 김영한 교수님의 “스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술” 의 내용 중 기억할 내용들을 메모하는 포스팅이다. 백앤드.. 배우려면 열심히 해야지. 취업까지 한 고지다. 회원 관리 예제 - 백엔드 개발 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 회원 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 간단하게 하는 이유는 스프링 생태계 파악용이니까.. 너무 복잡하게 생각하진 말자. 컨트롤러 : 웹 MVC 컨트롤러 역할, 웹 환경에서의 다양한 요청의 1차적 집합소(?) 서비스 : 핵심 비즈니스 로직을 구현, 룰, 제한사항, 서비스의 설계에서 가이드 역할을 해주는 공간 레포지터리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리하는 역할 도메인 : 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주…

April 24, 2023
til
java
TIL_of_Spring_230424

TIL of Java Spring 본 내용은 JAVA 기초 학습 이후 백앤드 스프링 기초를 배우기 위해 김영한 교수님의 “스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술” 의 내용 중 기억할 내용들을 메모하는 포스팅이다. 백앤드.. 배우려면 열심히 해야지. 취업까지 한 고지다. MVC와 템플릿 엔진 MVC : Model, View, Controller 요즘은 MVC 스타일로 많이 사용한다. view 란 화면 자체를 그리는 것에만 집중해야 한다. 이에 비해 controller는 비즈니스 로직과 관련이 있거나 내부적 처리에 집중하느 것을 의미한다. 이것을 Model, view, controller 로 분리해서 집중한다는 말은, 한 마디로 내부 구조를 명확하게 구분지어 화면을 뿌리는 요소와 내부 로직을 명확하게 구분지어주는 것을 의미한다. 위의 예시로 작성을 하게 되면 localhost:8080/hello-mvc 로 GET 할 경우, 값을 받아야 함을 지정해줄 …

April 24, 2023
til
java
OSTEP - Part 3. Persistency - 40

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 40. 파일 시스템 구현 이라는 간단한 파일 시스템을 구현하여서, 현존하는 시스템에 대한 이해도를 높이는 시도를 해보고자 한다. 파일 시스템은 순수한 소프트웨어다. CPU, 메모리와 같은 부분들은 가상화에 도움을 주는 하드웨어와의 조합을 통해 구현하지만, 파일 시스템에선 오로지 소프트웨어적 개선만을 고려할 것이다. (물론 실제 현실에선 동작 특성이 일부 고려된다.) vsfs를 구현해보면서, 현실에서 AFS에서 ZFS까지 다양한 파일 시스템들의 동작을 이해해보자. 40.1 생각하는 방법 파일 시스템에 대한 학습에서 바라보는 방법은 크게 다음과 같다. 파일 시스템의 자료구조 : 파일 시스템이 자신의 데이터와 메타 데이터를 관리하기 위해선 디스크 상에 어떤 자료구조를 취해야 하는가? 기본적으로 vsfs 에서는 간단한 배열의 구조를 취하겠지만, 다른 시스템의 경우 복잡한 트리 기반인…

April 23, 2023
study
TIL_of_Spring_230419

TIL of Java Spring 본 내용은 JAVA 기초 학습 이후 백앤드 스프링 기초를 배우기 위해 김영한 교수님의 “스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술” 의 내용 중 기억할 내용들을 메모하는 포스팅이다. 백앤드.. 배우려면 열심히 해야지. 취업까지 한 고지다. 빌드하고 실행하기 실제 동작하는 프로그램으로 만드는 것은 매우 간단하다. Mac OS 기준 명령어를 통해 알아서 돌아가게 된다. 빌드를 마친 후에는 경로를 따라 들어가면, 빌드가 된 완성 jar 파일이 눈에 들어올 것이다. 그 뒤 실행은 으로 정상 실행되는 것을 확인하면 빌드가 마무리 된 것이다. 이렇게 완성된 빌드 파일을 서버에 올리고 실행을 시키면 기본적인 서버가 구성이 되어 서버로 동작하게 될 것이며, 여기에 각종 파이프나 포트를 통해 마이크로서버의 구축이나, 도커를 활용한 컨테이너 기법을 통해 시스템의 구조를 여러모로 수정할 수도, 제작할 수도 있는 것이다. 추가로 …

April 19, 2023
til
java
반복문 - 25314 15552 11021

TIL of Algorithm 25314 - 코딩은 체육과목 입니다 문제 오늘은 혜아의 면접 날이다. 면접 준비를 열심히 해서 앞선 질문들을 잘 대답한 혜아는 이제 마지막으로 칠판에 직접 코딩하는 문제를 받았다. 혜아가 받은 문제는 두 수를 더하는 문제였다. C++ 책을 열심히 읽었던 혜아는 간단히 두 수를 더하는 코드를 칠판에 적었다. 코드를 본 면접관은 다음 질문을 했다. “만약, 입출력이 �$N$바이트 크기의 정수라면 프로그램을 어떻게 구현해야 할까요?” 혜아는 책에 있는 정수 자료형과 관련된 내용을 기억해 냈다. 책에는 는 4$4$바이트 정수까지 저장할 수 있는 정수 자료형이고 는 8$8$바이트 정수까지 저장할 수 있는 정수 자료형이라고 적혀 있었다. 혜아는 이런 생각이 들었다. “ 앞에 을 하나씩 더 붙일 때마다 4$4$바이트씩 저장할 수 있는 공간이 늘어나는 걸까? 분명 는 12$12$바이트, 는 16$16$바이트까지 저장할 수 있는 정수 자료형일 거야!” 그렇게 혜아는…

April 19, 2023
til
TIL_of_Spring_230417

TIL of Java Spring 본 내용은 JAVA 기초 학습 이후 백앤드 스프링 기초를 배우기 위해 김영한 교수님의 “스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술” 의 내용 중 기억할 내용들을 메모하는 포스팅이다. 백앤드.. 배우려면 열심히 해야지. 취업까지 한 고지다. 라이브러리 살펴보기 이전에 프로젝트를 생성하면서 라이브러리를 많이 받아오진 않았다. 하지만 막상 실제 다운로드 받아진 라이브러리는 정말 많은 것을 알 수있다. 요즘의 웹 어플리케이션 빌드에서 보통 몇 십메가 정도의 라이브러리들은 자동으로 다운로드가 되고 사용된다. Gradle이나 Maven 같은 빌드 툴들은 를 관리해주는 기능을 갖고 있다. 우리가 사용하려는 라이브러리를 선택하면, 해당 라이브러리가 동작하기 위한 의존 관계의 것들을 모두 자동으로 다운받고, 관리해주는 것이다. 인텔리제이의 우측에 보면 Gradle 항목이 있고, 이를 누르면 실제 의존관계를 확인할 수 있다. 또한…

April 17, 2023
til
java
반복문 - 8293 25304

TIL of Algorithm 8293 - 합 문제 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다. 출력 1부터 n까지 합을 출력한다. 예제 입력 / 예제 출력 작성 코드 후기 반복문의 구조에 부합하게 짜봤지만 제일 빠른 코드는 수학 방정식을 들고와 버리는 것이었구요;; 역시 수학이 필요하다는 건가 싶기도 하다. 25304 - 영수증 문제 준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다. 영수증에 적힌, 구매한 각 물건의 가격과 개수 구매한 물건들의 총 금액 을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자. 입력 첫째 줄에는 영수증에 적힌 총 금액 X 가 주어진다. 둘째 줄에는 영수증…

April 17, 2023
til
(작성중)Team Naver 2023 공채 도전기

Team Naver 도전기 ~ 코테는 쉽지 않아 기 네이버 공채 신입이 떴다는 소식을 들었다. 이에, 해당 내용을 확인하고 도전해볼까? 하는 생각이 들어 도전해보았던 이야기를 해보려고 한다. 거기서 느낀 점, 아직 부족한 지점이 과연 어떤 지점인가? 에 대해 알수 있던 시간이었다. 지금까지 진행한 과정을 설명하면 1) 자기 소개서 만들기, 포트 폴리오 꾸미기, 지옥의 글정리 및 재업로드하기 2) 새벽같이 동빈이형의 승 전 결 Team Naver 도전기 ~ 코테는 쉽지 않아 기 승 전 결

April 15, 2023
etc
TIL_of_Spring_230413

TIL of Java Spring 본 내용은 JAVA 기초 학습 이후 백앤드 스프링 기초를 배우기 위해 김영한 교수님의 “스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술” 의 내용 중 기억할 내용들을 메모하는 포스팅이다. 백앤드.. 배우려면 열심히 해야지. 취업까지 한 고지다. 강의 소개 목표 => 간단한 웹 어플리케이션 개발 스프링 부트 프로젝트 생성 스프링 부트로 웹 서버 실행 회원 도메인 개발 웹 MVC 개발 DB 연동 - JDBC, JPA, 스프링 데이터 JPA 테스트 케이스 작성 ~ 큰그림과 핵심 기술들을 돌려보면서, 어디서 무엇이 어떻게 왜 쓰이는지를 파악하자 가 목표! 내가 이 강의에서 지켜 나가고, 배워가야할 것 첫 감 잡기에 만족하자 스프링 기술에 매몰되지 말자 실무에서 안 쓰는 건 과감히 제거하자. 김영한 교수님의 강의 시리즈를 다 볼 수 있을지는 애매하다(무엇보다 돈이;;). 일단 기본만 하고 실 프로젝트에 들어가봐야 알것 같긴한데… 흠…

April 13, 2023
til
java
반복문 - 10950

TIL of Algorithm 문제 두 정수 A와 B를 입력 받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다(0 < A, B < 10) 출력 각 테스트 케이스마다 A+B 를 출력한다. 예제 입력 예제 출력 작성 코드 후기 2739번도 풀었다. 하지만 워낙 쉬운 문제이기 때문에 스킵함. 오늘 느낀 거지만 파이썬 형변환도 그렇고 너무 쉬운거 아닌가.. range함수의 경우 사용 방식이 여러가지라 처음엔 어떻게 넣어야 정상 작동하는지 헷갈렸다. 지금은 완벽… TIL of Algorithm 문제 입력 출력 예제 입력 예제 출력 작성 코드 후기

April 13, 2023
til
조건문 - 2480

TIL of Algorithm 문제 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.  같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.  같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.  모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.   예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다. 3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오. 입력 첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 …

April 12, 2023
til
Webserv를 다시 돌아보며 - 4

Reminding : Webserv 웹서브의 마지막 후기 글. 이번에는 ‘실패’와 ‘성공’을 곱씹어 보려고 한다. Webserv 1.0의 실패 = 신뢰감이 떨어지고, 팀은 부숴졌다. 사실 이 내용을 적는 것이 옳은가? 하는 생각을 조금 해보았다. 나에게 이것을 곱씹는 것이 도움이 될까? 라는 생각을 잠시 해보았다. 이윽고 내 머릿속에 남겨진 말은 ‘그럼에도 불구하고 가치있는 작업이다’ 라는 생각이었다. 나의 부족함을 드러내는 것일 수도 있으며, 잘못 적으면 오해가 될 만한 부분이라고 생각도 든다. 하지만 그런 것들이 부끄럽거나, 그저 포장만 잘해서는 진짜 객관적 성장을 이루는 것은 불가능하다는걸 몸소 지금껏 느껴오지 않았는가? 더불어 내가 부족했던 점에 대해서도 좀더 고민을 해봐야 한다고 생각했다. 왜냐면 실패기의 과정에서 나는 상당히 열도 받았었고, 어이가 없었기에 결국 박차고 일어나 새롭게 팀을 구했다. 하지만 거기서 더 좋은 방법이나, 더 현명한 해결책이 있었을지 누가 알겠는…

April 10, 2023
42seoul
etc
Webserv를 다시 돌아보며 - 3

Reminding : Webserv Webserv 구축, ‘우리의 웹서브’는 이번 Post에서는 웹서브의 구현 구조에 대해서 설명하는 시간을 가지려고 한다. 이 이야기를 정리하려면 사실 굉장히 다사다난했던(?) 내 팀 프로젝트 과정을 설명을 해야겠지만… 이는 스스로의 과정을 되돌아보는 다음 게시물에서 자세히 다루도록 하고, 지금은 그저 핵심적인 내용과 성공적으로 구현한 내용에 대해 살펴보고자 한다. 우선 나는 전체 기간으로 따지면 웹 서브를 3달에 걸쳐 구현했다. 1달 스터디를 하고 1달을 짰지만, 팀이 와해(…) 되는 바람에, 거기서 나와 스스로 팀을 다시 꾸렸다. 그리고 그 팀을 이끌면서 메인 로직을 담당하여 설계를 했으며, 그 결과 2 + 1달로 승부를 보고 평가를 마쳤다. 웹서브는 상당히 부담스러운 과제였다. 내용 자체도 워낙 많았지만 모호한 영역도 상당했다. 그렇기에 거기서 어떤 식으로 구현을 하는가? 해야 하는가? 라는 부분은 항상 머릿속에 맴돌았고, 그래도 감사한 것은…

April 10, 2023
42seoul
etc
Webserv를 다시 돌아보며 - 2

Reminding : Webserv Key of Webserv 웹 서브의 핵심은 이다. 정말 말이 길지만 이를 풀어가면서 웹서브의 역할과 로직에 대해서 정리해보고자 한다. 비동기(Asynchronous) 보통 통신, 혹은 어떤 객체와 객체 간의 통신을 떠올리면 우리는 자연스럽게 로직을 이렇게 생각할 수 있다. A라는 쪽에서 B에게 무언가를 전달하면, 전달받은 것에 대해 B 는 다시 A를 향해 대응하는 내용을 담아 전달을 한다. 이러한 방식은 에 대한 가 명확하게 예상되며, 이를 통해 요청하는 상황에서 얻을 답을 바로 받을 수 있다는 확신을 가지는 소통 방식이라 할 수 있다. 컴퓨터적으로 보았을 때 이러한 통신의 루틴은 아주 통상적인 방식에 가깝다. 예를 들어 read() 함수를 떠올려보자. 표준 입력으로 해당 함수를 호출하게 되면, 해당 함수는 EOF 를 만나기 전까지 계속 기다리며 사용자의 표준 입력을 기다린다. 그리곤 기다리던 과정에서 원하는 요청(데이터)이 들어오면, 이에…

April 09, 2023
42seoul
etc
OSTEP - Part 3. Persistency - 39

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 39. 막간 : 파일과 디렉터리 운영체제는 자신만의 프로세서 또는 프로세서들과 자신만의 메모리가 있는 것처럼 만들어준다. 이러한 환상은 프로그램 개발을 촉진하고, 다양한 프로그래밍이 가능한 플랫폼에서 광범위하게 차용하고 있다. 이번 장에선 영속 저장장치(persistent storage) 라고 하는 가상화의 핵심 개념을 다룬다. 하드 디스크, 최근에는 솔리드 스테이 드라이브까지, 전원공급이 차단되면 내용이 사라지는 메모리와는 다르게 영속 저장장치는 그러한 상황에서도 데이터를 그대로 보존해야하고, 당연히 운영체제는 그런 장치들을 좀더 신중하게 다루어야 한다. 오늘의 파트는 영속 데이터를 관리하는 핵심 기술을 살피며, 성능과 신뢰성 향상의 기법을 중점적으로 바라볼 것이다. 39.1 파일과 디렉터리 저장화 장치의 가상화를 위한 핵심 개념은 1) 파일이며, 2)디렉터리 개념이다. 파…

April 09, 2023
study
OSTEP - Part 3. Persistency - 38

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 38 Redundant Array of Inexpensive Disk(RAID) 디스크를 사용할 때 디스크가 좀더 빨랐으면 하는 바램이 있다. 입출력 작업은 항상 시스템 전체의 병목이 되기 때문이다. 용량도 마찬가지며, 안정성도 마찬가지로 필요하다. 디스크가 고장이 나는 경우 백업 없이는 소중한 데이터를 잃어 버리기 때문이다. 이번 장은 Redundant Array of Inexpensive Disk 또는 RAID 라고 알려진 기술을 보고자 한다. 외면적으로 RAID는 하나의 디스크처럼 보인다. 읽거나 쓸수 있는 블럭의 그룹으로 보인다. 그러나 안을 들여다 보면 RAID는 여러 개의 디스크와 메모리(휘발성과 비휘발성을 모두 포함), 시스템을 관리하기 위한 하나 또는 그 이상의 프로세서로 이루어진 복잡한 기계이다. RAID의 하드웨어는 컴퓨터 시스템과 매우 유사하며, 디스크의 …

April 02, 2023
study
Webserv를 다시 돌아보며 - 1

Reminding : Webserv ‘Webserv’ = HTTP + Web + nginx 드디어, 정말로 놀랍게도 Coding의 C 도 모른다고 생각했던 류한솔은 42서울에서 가장 난이도 높은 과제 중 하나를 클리어 해냈다. 스스로도 대단히 감격스러운 순간이다. 😂 백앤드가 무엇인가를 배우거나, 아직 완벽히 준비된 것은 아니겠지만, 웹이란 것이 무얼 말하고, HTTP 통신이란 것이 무얼 원하는 것인가 등등… 정말 실질적으로 동작하는 서버를 구축했다는 점에서 내가 정말 무언가를 만들었구나- 라는 생각이 들었다. 이제는 정말 배우기만 하는게 아니라 스스로 만들어 낼 수 있다라는 확신이 드는 순간이 아닐까? 이제 앞으로 딱 두 과제, 두 과제만 해결한다면 나는 42서울의 공통과정을 마치고 개발자로서 취업도, 또 다른 도전도 가능해진다. 나의 마지막 도전이 정말 제대로 시작되는 것 같아 대단히 감격스럽고, 뜻 깊다. 처음 웹 서브를 도전하게 되었을 때, 정말 막연한 두려움이 내 앞을 …

March 29, 2023
42seoul
etc
OSTEP - Part 3. Persistency - 37

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 37 하드 디스크 드라이브 이전 장에서 입출력 장치에 대한 전반적인 개념을 다루었고, 운영체제가 I/O 장치라는 괴물과 어떻게 상호작용하는지 살펴보았다. 이제는 특정 장치에 대해 더 살펴 볼 것이다. 하드디스크 드라이브는 지속적으로 컴퓨터 시스템의 영구적인 데이터 저장소였으며, 영속성 핵심 주제인 파일 시스템도 결국 하드 디스크 드라이브의 동작에 기반을 두고 개발되었다. 따라서 디스크를 관리하는 파일 시스템 소프트웨어를 구현하기 전에 디스크의 상세한 동작을 이헤하는 것이 중요하다. 37.1 인터페이스 현대의 하드 디스크 드라이브의 인터페이스는 단순하다. 읽고 쓸 수 있는 매우 많은 수의 섹터(512byte 블럭)들로 이루어져 있다. 디스크 위의 n개의 섹터들은 0부터 n-1까지의 이름이 붙어 있다. 그렇기에 디스크를 섹터들의 배열로 볼 수 있으며, 0부터 n -1 까지를 드…

March 26, 2023
study
OSTEP - Part 3. Persistence - 36

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 35 영속성에 관한 대화 해당 파트는 적당하게 강조점들만 정리하여 핵심을 정리하고 넘어간다. Persistence(영속성)은 사전적으로 곤경과 반대에도 불구하고 굳게 또는 완고하게 행동 방침을 유지할 때 쓰는 말이라고 한다. 이는 컴퓨터도 마찬가지로, 정보도 마찬가지의 의미를 강조한다고 보면 된다. 컴퓨터가 멈추고 디스크가 고장이 나거나 전원이 꺼져도 정보 자체는 유지 되어야 하고, 되도록 만들어야 한다. 그것이 설령 어려운 도전이라도 말이다. 36 I/O 장치 주제(영속성)에 대한 세부적 논의에 앞서 입출력 장치(I/O)의 개념을 먼저 이야기 하고자 한다. 결국 컴퓨터에서 연산을 하고 컴퓨터 시스템을 유용하게 쓰려면 당연히 입력과 출력이 존재 해야 한다는 점에서, 우선적으로 기반을 닦고 간다. 36.1 시스템 구조 위 그림을 보자. CPU와 주 메모리가 메모리 버스로 연결…

March 26, 2023
study
OSTEP - Part 2. Concurrency - 33

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 33 이벤트 기반의 병행성(고급) 동시성을 가진 프로그램이라고 하는 것은, 쓰레드 만이 방법론으로 존재하는 것이 아니다. GUI 기반의 프로그램이나, 인터넷 서버에서는 다른 스타일의 병행 프로그래밍이 사용된다. 이 방법이 바로 이벤트 기반의 동시성(event-based concurrency) 의 방법이다. 이 방법의 핵심은 동시 프로그래밍, 병렬 프로그래밍이라는 어려운 방법을 사용한 것이 아니다. 이러한 방법은 자료 구조를 락으로 보호 해야하거나, CPU의 스케쥴링에 기대서 잘 처리되기를 바라는 등의복잡한 작업들이 필요하다. 시미어 개발자는 운영체제가 합리적으로 쓰레드가 처리되길 기도하는 수밖에 없다(!) 따라서 이번 과에서는 다음과 같은 것을 배울 것이다. 33.1 기본 개념 : 이벤트 루프 결국, 위에서 언급한 내용처럼 핵심은 이벤트 기반의 동시성(병행성) 이다. 이 접근…

March 26, 2023
study
OSTEP - Part 2. Concurrency - 32

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 32 병행성 관련 버그 수년 동안 병행성 관련 오류의 해결은 주요한 숙제였다. 대부분의 초기 연구는 교착 상태에 초점이 맞추어져 있었고, 최근에는 다른 종류의 버그들도 다루고 있다. 실 코드를 보면서 이러한 경우와 어떤 문제들을 조심해야 동시성(병행성)을 유지할 수 있는지를 살필 것이다. 32.1 오류의 종류 복잡한 동시성 프로그램에서는 어떤 종류의 문제점들이 발생하는가? 위 예시를 보면 알 수 있듯이 다양한 오류가 발생하는 것이 보이며, 그중 대부분이 의외로 교착 상태와 무관한 오류였다. 따라서 우선적으로 비교착 상태에 대한 오류를 살펴 본 뒤에, 교착 상태 오류들을 다룰 때에, 이 분야에서 핵심 중에 핵심 소재인 예방, 회피, 해결 혹은 관리 연구에 대해 논의 한다. 32.2 비 교착 상태 오류 Lu라는 연구자의 결과에 따르면 절반의 버그는 교착 상태와 무관한 버그였다.…

March 13, 2023
study
OSTEP - Part 2. Concurrency - 31

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 31 세마포어 다양한 범주의 병행성 문제 해결을 위해선 락, 컨디션 변수 모두 필요하다. 이를 인지한 최초의 사람들 중 한 사람이 다익스트라 이다. 그는 최단 경로 알고리즘을 시작으로 Goto문의 유해성 등 구조화 프로그래밍의 논쟁을 일으킨 장본인이다. 이번 장에서 배우는 세마포어(semaphore) 동기화 기법 역시 그가 개발한 것이다. 세마포어는 락과 컨디션 변수로 모두 사용이 가능한 도구이다. 31.1 세마포어 : 정의 세마포어는 정수 값을 갖는 객체로, 두 개의 루틴으로 조작할 수 있다. POSIX 표준에서는 이 두 루틴을 , 라고 한다. 우선 사용을 위해선 값을 초기화해야 한다. 위 예시는 세마포어 s를 선언, 3번째 인자 1을 전달하여 세마포어의 값을 1로 초기화 한다. 두번째 값은 모든 예제에서 0으로 둘 것이다. 이 값은 같은 프로세스 내의 쓰레드 간에 세마포…

March 11, 2023
study
OSTEP - Part 2. Concurrency - 30

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 30 컨디션 변수 사실 락은 하드웨어와 운영체제의 지원을 적절하게 받아서 만들었던 도구이다. 더불어 동시성 프로그램 제작에서 락만이 정답은 아니다. 쓰레드가 실행을 계속 하기 전에, 어떤 특정 조건의 만족 여부를 검사해야 될 수 있는데, 이때 사용하는 것이 컨디션 변수이다. 이러한 상황에서 해결할 수 있는 방법으로는 대기를 한다거나 ,여러 방법이 있을 수 있다. 락도 포함되고 여럿이 존재하지만 효과적인 것은 쓰레드를 잠을 재우는 방법이다. 30.1 컨디션 변수의 개념과 관련 루틴 쓰레드 실행 시 특정 조건이 만족될 때까지의 대기를 위해 라고 불리는 개념을 사용할 수 있다. 이것은 일종의 큐로, 컨디션 변수는 쓰레드 실행에서 어떤 상태가 원하는 것과 다를 때 만족되기를 대기하는 큐이다. 컨디션 변수의 시초는 다익스트라(Dijikstra)가 Private Semaphore 라…

March 05, 2023
study
OSTEP - Part 2. Concurrency - 29

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 29 락 기반의 병행 자료 구조 가장 먼저 범용 자료구조에서 락을 사용하는 방법에 대해 살펴보자. 자료구조에 락을 추가하면 해당 자료 구조를 경쟁 조건에서 자유로워질 수 있다.(쓰레드 안전, thread safe) 그러나 락이 어떤 방식으로 추가되냐에 따라 그 성능이 매우 천차만별이 될 수 있다. 29.1 병행 카운터 가장 보편적으로 사용되는 구조 중 하나이며, 간단한 인터페이스를 갖고 있다. 아래의 예시가 락이 없는, 병행이 불가능한 카운터와 반대로 가능한 경우를 보여준다. 간단하지만 확장성이 없음 위 예시, 병행이 가능한 카운터는 간단하지만 상당히 정확히 동작한다. 기본적인 병행 자료 구조의 보편적인 디자인 패턴을 따르고 있다. 이러한 방식은 monitor 를 사용하여 만든 자료구조와 유사하다. 모니터 기법 자체는 객체에 대한 메소드를 호출하고 리턴할 때 자동적으로 락을 …

March 05, 2023
study
OSTEP - Part 2. Concurrency - 28

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 28 락 이 장에서는 앞서 다룬 락(lock) 을 이용하여 이 문제를 직접적으로 다루고자 한다. 프로그래머들은 소스 코드의 임계 영역을 락으로 둘러서 그 임계 영역이 마치 하나의 원자 단위 명령어인 것처럼 실행되도록 한다. 28.1 락: 기본 개념 락은 일종의 변수다. 락의 변수는 락의 상태를 나타낸다. 사용가능 상태(available) : unlocked 나 free 상태 사용중(acquired) : 점유 중 상태 락의 자료구조에 락을 보유한 쓰레드에 대한 정보나, 락을 대기하는 쓰레드들에 대한 정보 저장도 가능하다. lock() 과 unlock() : lock 루틴을 호출함으로써 락 획득을 시도한다. 락을 획득하면, 임계영역으로 진입이 된다. 이렇게 락을 획득한 쓰레드를 라고 부른다. lock의 소유자가 임계영역에 존재하는 상태에서는 다른 쓰레드들은 임계영역을 진입할 …

February 26, 2023
study
OSTEP - Part 2. Concurrency - 27

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 27 막간 : 쓰레드 API 쓰레드를 다루기 위한 API의 주요 부분을 간략하게 다룬다. 27.1 쓰레드 생성 쓰레드 생성은 POSIX에서 다음과 같이 정의한다. 4인자를 가지며, 는 pthread_t 타입 구조체를 가리킨다. 은 쓰레드 속성을 지정하는 데 사용한다. 스택의 크기, 쓰레드 스케줄링 우선순위와 같은 정보를 지정하는 용도이며, 개별속성은 함수를 호출하여 초기화할 수 있다. 디폴트로 값을 넣고 싶을 때는 NULL 을 지정해주면 된다. 세번째 인자는 쓰레드가 실행될 함수를 나타낸다. C 언어의 함수 포인터 개념으로 구성되어 있고, void 타입의 포인터 한개를 전달 받는다. 더불어 이 함수 포인터 역시 를 타입값으로 반환한다. 여기서 void 포인터 타입 대신 integer를 인자로 쓴다거나, 함수 포인터 자체에 들어가는 인자를 int형으로 받는 다거나 하는 방…

February 18, 2023
study
OSTEP - Part 2. Concurrency - 25 ~ 26

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 25. 동시성(병행성)에 관한 대화 본 교재에서는 이란 키워드로 설명을 진행합니다. 하지만 현재 공통적으로 사용되는 한국어 번역은 라고 생각하여, 이후 모든 ‘병행성’은 ‘동시성’으로 지칭하고 진행합니다. 대화 내용 생략 동시성이라고 하는 항목은 응용 프로그램이 보다 빠르지만 정확하게 여러 작업이 한꺼번에 일어나도록 하는 것과 관련이 있다. 그럼에도 왜 이것을 운영체제에서 배워야 하는가? ➡️ 운영체제는 락(lock)과 컨디션 변수(condition variables)와 같은 멀티 쓰레드 프로그램을 지원해야 하기 때문이다. 운영체제는 그 자체가 최초의 동시성 프로그램이기 때문이다. 26. 동시성 : 개요 지금까지 배운 내용, 가상화를 통해 가상 CPU로 CPU를 확장하여 여러 프로그램이 동시 실행하는 듯한 착시를 만듬 가상 메모리를 가지는 것으로, 실제 메모리 공간에서 프로세스…

February 18, 2023
study
OSTEP - Part 1. Virtualization - 23

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 23. 완전한 가상 메모리 시스템 완전한 가상 메모리 시스템 구현을 위해선, 페이지 테이블 설계 방식, TLB와의 상호작용(MMU), 페이지 교체 정책 외에도 많은 다양한 특징들이 필요하다. 이러한 특징에는 , , 등을 다양하게 포함하고 있다. 그렇기에 이번 챕터의 핵심 질문은 다음과 같다. 핵심 질문 : 완전한 VM 시스템 구현 하는 방법은? 완전한 가상 메모리 시스템을 구현하기 위해서 필요한 특징은 무엇인가? 2개의 기존 시스템을 바라보면서 구체적인 구현 방법에 대해 알아볼 것이다. 1970년대, 80년대 초에 개발된 것으로 현대적인 가상 메모리 관리자의 시초인 VAX, VMS 운영체제를 찾을 수 있고, 학습할 가치가 있는 시스템이다. 두번째로 볼 시스템은 Linux에 대한 내용이다. 이는 Linux가 널리 사용되는 시스템이며, 아주 다양한 곳에서 Linux VM 시스템…

February 14, 2023
study
OSTEP - Part 1. Virtualization - 22

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 22. 물리 메모리 크기의 극복: 정책 가상 메모리 관리자의 입장에서 비어있는 메모리가 많을 수록 관리가 쉬워진다. 페이지 폴트가 발생하면, 빈 페이지 리스트에서 페이지를 찾아서 폴트를 일으킨 페이지에게 할당하면 된다. 하지만 빈 메모리 공간이 없는 경우 관리는 더욱 복잡해진다. OS는 이러한 상황 메모리 압박(memory pressure) 를 해소하기 위해 다른 페이지들을 강제적으로 paging-out 하여 활발히 사용 중인 페이지들을 위한 공간을 확보한다. 여기서 내보낼(evict) 페이지(또는 페이지들) 을 선택하는 과정은 OS의 교체 정책(replacement policy) 안에 집약되어 있다. 과거 시스템에서 이러한 정책은 시스템의 물리 메모리의 크기가 작기 때문에 초기 가상 메모리 시스템의 핵심이었다. 핵심 질문 : 내보낼 페이지는 어떻게 결정하는가? 이 결정은 시…

February 12, 2023
study
OSTEP - Part 1. Virtualization - 21

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 21. 물리 메모리 크기의 극복: 메커니즘 지금까지 가상 주소 공간이 아주 작고, 모두 물리 메모리에 탑재가 가능한 것으로 가정하였다. 하지만 이는 가정에 가까우며, 이제부턴 다수 프로세스들이 동시에 각자 크 ㄴ주소 공간을 사용하고 있는 상황이라고 볼 것이다. 이를 위해 메모리 계층에 레이어의 추가가 필요하다. 지금까지는 모든 페이지들이 물리 메모리에 존재할거라 생각했으나, 이젠 큰 주소 공간 지원을 위해 주소 공간 중 크게 필요하지 않은 부분은 ‘보관’해 둘 공간이 필요하게 된 것이다. 그리고 이런 경우 당연히 그 공간은 메모리 공간 보다 크며, 느리다. 현대 시스템에서 주 기억장치인 SSD, HDD가 이 역할을 한다고 보면 된다. 핵심 질문 : 물리 메모리 이상으로 나아가기 위해선 어떻게 할까 운영체제가 어떻게 크고 느린 저장 장치를 사용해서, 커다란 가상 주소 공간이 있…

February 12, 2023
study
OSTEP - Part 1. Virtualization - 20

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 20. 페이징: 더 작은 테이블 페이징의 두 번째 문제점은 페이지 테이블의 크기다. 크기가 커진다면 많은 메모리 공간을 사용하게 된다. 선형 페이지 테이블(linear page table)을 예를 들어보면, 페이지 크기가 4KB이고, 페이지 테이블 각 항목은 4바이트인 32비트 주소 공간을 가정해보자. 이 경우 주소 공간에는 대략 백만 개의 가상 페이지가 존재할 것이다. 여기서 페이지 테이블 항목의 크기를 곱하면 페이지 테이블의 크기가 된다. 즉 백만 * 4바이트 = 4MB 가 되는 것이다. 일반적으로 각 프로세스는 자기 자신의 페이지 테이블을 갖으며, 백개의 프로세스가 실행중이 되면 페이지 테이블이 100개가 존재하게 되며, 이때 페이지 테이블은 전체 주소 페이지 테이블 크기는 400MByte 의 메모리를 쓸 수 밖에 없는 것이다. 핵심 질문 : 페이지 테이블을 어떻게 더 …

February 05, 2023
study
OSTEP - Part 1. Virtualization - 19

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 19. 페이징 : 더 빠른 변환(TLB) 페이징은 성능 저하를 유발한다. 페이징은 주소 공간을 일정하게 페이지 사이즈로 크기를 나눈 뒤 각 페이지 실제 위치(매핑 정보, mapping information)를 메모리에 저장한다. 매칭 정보를 저장하는 자료구조가 페이지 테이블이며, 각 프로세스당 하나씩 생성된다. 가장 중요한 것은 가상 주소에서 물리주소로 변환하면서 메모리에 존재하는 매핑 정보를 읽어야 한다는 사실이고, 이때 엄청난 성능저하를 수반한다는 점이다. 이에 이와같이 질문할 수 있을 것이다. 핵심 질문 : 주소 변환 속도를 어떻게 향상할까 주소 변환을 어떻게 빨리 할수 있을까? 페이징에서 발생하는 추가 메모리 참조를 어떻게 피할 수 있을까? 어떤 하드웨어가 필요하며, 운영체제는 어떤식으로 개입해야 할까? 운영체제의 실행 속도를 개선하기위해선 도움이 필요하고, 하드웨어로…

January 28, 2023
study
OSTEP - Part 1. Virtualization - 18

본 내용은 OSTEP 의 내 용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 18. 페이징 : 개요 운영체제의 공간을 관리할 때, 크게 두 가지 방법으로 관리가 가능하다. 첫 번째 방법은 세그멘테이션 파트에서 봣듯이 의 조각들로 분할하는 것이다. 그러나 이 방법은 태생적인 문제를 갖고 있는데 이는 청크로 분할할 때 공간 자체가 단편화 될 수 있고, 할당은 점점 어려워지며, 성능적 제한이 있다는 사실이다. 두 번째 방법은 공간은 동일 크기의 조각으로 분할하는 페이장(paging) 이라는 아이디어가 바로 그것이다. 프로세스의 주소 공간을 몇 개의 가변 크기의 논리 세그먼트로 분리하는 것이 아니라, 고정 크기의 단위로 나눈다. 이 각각의 고정 크기 단위를 라고 부르며, 상응 하는 물리 메모리도 이라고 불리는 고정 크기의 슬롯의 배열이라고 생각한다. 이 프레임은 각각 하나의 가상 메모리 페이지를 저장할 수 있다. 핵심 질문 : 페이지를 사용하여 어떻게 …

January 28, 2023
study
OSTEP - Part 1. Virtualization - 17

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 17. 빈 공간 관리 메모리 관리 시스템이란 프로세스 힙의 페이지를 관리하는 malloc 라이브러리일 수도 있고 혹은 프로세스의 주소 공간의 일부분을 관리하는 운영체제 자체일 수 있다. 구체적으로 이 장에서 논의 할 내용은 빈 공간 관리 에 대한 내용이다. 빈 공간에 대한 관리는 페이징의 개념을 논의 하게되면 상대적으로 쉬운 논제가 되지만, 빈 공간 관리가 더 어렵고, 흥미롭게 되는 것은 공간이 가변크기인 빈 공간들의 집합으로 구성되어 있는 경우이다. 이 경우는 malloc()과 free()에서 처럼 사용자 수준 메모리-할당 라이브러리에서, 그리고 세그멘테이션으로 물리 메모리를 관리하는 운영체제에서 발생할 수 밖에 없다. 이러한 상황에서 외부 단편화가 존재하며, 그런 과정에서 빈 공간들의 전체 크기가 요청된 것보다 크더라도, 하나의 연속된 영역이 존재하지 않으면 요청의 실패가…

January 28, 2023
study
OSTEP - Part 1. Virtualization - 16

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 16. 세그멘테이션 (Segmentation) 베이스와 바운드 레지스터를 활용하는 방식은 운영체제가 프로세스를 물리 메모리의 다른 부분으로 쉽게 재배치 할 수 있게 해주었다. 하지만 이러한 형태는 가장 큰 문제로 스택과 힙 사이에 사용되지 않는 큰 공간이 존재한다는 점이다. 위 그림에서 볼 수 있드이 구조를 짜면서 공간이 여전히 사용되지 않으나 할당되는 구조를 갖고 있고, 물리 메모리에 재배치 할 때 물리 메모리를 차지하게 된다. 메모리 낭비가 심하다. 뿐만 아니라 주소 공간이 물리 메모리보다 큰 경우 실행이 매우 어렵다. 이런 점에서 베이스와 바운드 방식은 유연성이 없다고 볼 수 있다. 핵심 질문 : 대형주소공간을 어떻게 지원하는가? 16.1 베이스 / 바운드의 일반화 위에서 지적한 문제들을 해결하고자 나온 방식이 이다. MMU에 하나의 베이스와 바운드 값이 존재하는 것이…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 15

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 15. 주소 변환의 원리 CPU 가상화에서 이라는 기법에 대해 공부했다. 타이머 인터럽트가 발생하는 상황에, 운영체제가 개입하여 문제 발생을 막거나, 하드웨어 지원을 통해 효율적인 가상화를 꽤한다. 중요한 순간 마다 운영체제가 관여하여 하드웨어를 직접 제어함으로써 효율성과 제어를 이루는 것이 현대 운영체제의 목표이다. 메모리의 가상화 역시 이와 비슷하다. 결국 과 를 동시에 추구하며, 이를 위한 핵심적인 내용은 상당히 쉬운 원리로 구성되어 있다(물론 뒤로 가면 징그럽게 어렵지만). 효율성을 위해선 몇 개의 레지스터를 사용하고, 이후에는 TLB와 같은 복잡한 하드웨어를 통해 얻어낸다. 제어는 응용 프로그램이 자기자신의 메모리 이외에 다른 메모리에 접근하지 못하는 것을 운영체제가 지원하는 것을 의미하며, 이러한 것들이 지켜지면서도 유연성 측면에서 메모리 가상화 시스템에서는 프…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 14

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 14. 막간 : 메모리 관리 API UNIX 시스템에서의 메모리 관리 인터페이스 간략하게 소개한다. 핵심 질문 : 어떻게 메모리를 할당하고, 관리하는가? 14.1 메모리 공간의 종류 C 프로그래밍에서 메모리는 두 가지 영역으로 나뉘어 할당된다. 첫 째는 스택(stack), 둘째는 힙(heap) 영역이다. 스택(stack) 메모리는 할당과 반환이 컴파일러에 의해 암묵적으로 이루어 진다. 이러한 이유로 때론 라고도 불린다. 그저 선언만 하면 되고, 선언 이후, 컴파일러는 나머지 작업을 수행하고, 함수가 종료되면 리턴되면서 프로그래머 대신 메모리를 반환한다. 힙 메모리는 오랫동안 값이 유지되어야 하는 변수를 위하며, 모든 할당과 반환이 프로그래머에 의해 명시적 으로 처리 되어야 하며, 정상적으로 관리되지 못하면 많은 버그의 원인이 되곤 한다. 힙 메모리의 이러한 특성 때문에 이 1…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 13

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 10과 끝나고 갑자기 13과라 당황스럽겠지만, 중간 대화 등을 생략했다 ㅎㅎ.. 13. 주소 공간의 개념 13.1 초기 시스템 메모리 관점에서 초기 컴퓨터는 많은 개념을 사용자에게 제공하지 않았고, 컴퓨터의 물리 메모리는 아래의 그림과 닮아 있었다. 물리 메모리에 하나의 실행중인 프로그램이 존재하고, 나머지 메모리를 사용한다. 특별한 가상화도 존재 하지 않았고, 사용자는 운영체제로부터 많은 것을 기대하지 않았다. 13.2 멀티프로그래밍과 시분할 멀티 프로그래밍 시대가 도래하였고, 여러 프로세스가 실행 준비 상태에 있고 운영체제는 그들을 전환하면서 실행하는 구조화 되어 갔다. 프로세스는 전환되는 것들이 생기니 CPU 이용률이 증가되었고, 특히나 이러한 상황에서 효율성 개선이라는 키워드에 집중하게 되었다. 점차 더 많은 기대치를 갖게된 컴퓨터에는 시분할(time-sharing)…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 9 ~ 10

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 9. 스케줄링 : 비례 배분 비례 배분(Proportional Share)스케줄러, 공정 배분(fair share)이라고도 하는 유형의 스케줄러에 대해 다루도록 하겠다. 반환시간이나 응답 시간을 최적화는 대신 스케줄러가 각 작업에게 CPU의 일정 비율을 보장하는 것이 목적이다. 비례 배분 스케줄링의 좋은 예가 추첨 스케줄링(lottery scheduling) 으로 알려져 있다. 핵심 질문 : 어떻게 CPU를 정해진 비율로 배분할 수 있는가. 특정 비율로 CPU를 배분하는 스케줄러를 어떻게 설계할 수 있는가? 기본 개념 : 추첨권이 당신이 지분이다 추첨권이라는 기본적인 개념이 추첨 스케줄링의 근간을 이룬다. 추첨권은 경품권의 개념과 유사하고 특정 자원에 대한 프로세스에게 할달될 몫을 나타낸다. 팁 : 무작위성의 이용 추첨권 스케줄릥 큰 장점 중 하나는 무작위서이다. 이러한 무작…

January 08, 2023
study
OSTEP - Part 1. Virtualization - 7 ~ 8

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 7. Scheduling : Introduction 스케줄링 정책 (scheduling policy) 이라는 것은 원칙 (discipline)이라고도 하며, 오랜시간 개발되어왔다. 초기에 생산 관리 분야에서 어떻게 효과적이고 효율적으로 할지에 대한 방법론적 문제가 존재해왔고, 그것이 컴퓨터라는 영역에서도 연결되어 왔다고 생각하면 된다. 핵심 질문 : 스케줄링 정책은 어떻게 개발하는가스케줄링 정책을 하기 위한 기본적인 프레임워크는 어떻게 만드는가, 어떤 가정과 어떤 기준으로 정책의 평가가 일어나는가? 초기의 기법들은 무엇이 있을까? 7.1 워크로드에 대한 가정 워크로드 (workload) : 프로세스가 동작하는 일련의 행위 적절한 워크로드의 선정이, 스케줄링 정책 개발에 매우 중요한 부분이다. 시스템에서 실행 중인 프로세스 혹은 작업(job) 에 대해 다음과 같은 가정을 한다.…

December 17, 2022
study
OSTEP - Part 1. Virtualization - 3 ~ 6

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 3. A Dialogue on Virtualization 4. The Abstraction: The Process 본 챕터에서 학습할 내용은 운영체제가 사용자에게 제공하는 가장 근본적인 추상화 개념 중 하나인 프로세스 이다. 프로세스Process : 실행중인 프로그램 프로그램Program : 디스크 상에 저장된 명령어의 덩어리로, 어떤 명령을 행하기 전 상태. 운영체제의해 변환되어 프로그램은 유용한 형태의 실행중인 대상으로 바뀌게 된다. 일단 하나의 프로그램 이상을 실행시킬 사람들은 종종 원한다. 그렇기에 실제로 전형적인 시스템들은 겉 보기엔 동시에 수백개의 프로세스들을 가동시키는 것처럼 보인다. 문제의 핵심어떻게 하면 많은 CPU들이 있는 화상을 제공할 수 있을까?비록 물리적 이용가능한 연산장치는 몇개 없다하더라도, 어떻게 운영체제는 CPU들이 거의 무한대의 작업을 지원하는…

September 14, 2022
study
CPP 스터디 00 - destructor

이번 내용에서는 생성자에 대해 배웠고, 변수를 초기화 하지 않아서 생기는 C의 다양한 오류들을 효과적이고, 효율적으로 없앨 수 있었다. 더불어 함수 오버로딩의 정책 덕분에 C언어에서 함수들의 이름을 제대로 사용하지 않으면 안되었지만, 더욱 편리한 사용이 가능해졌다. 스타크래프트 만들기 위 코드에서 실제 게임 처럼 수십마리 호출 및 싸우게 만들 수 없음. 이를 위해선 아래처럼 만들수 있다. 소멸자(Destructor) 지금까지 만든 마린 클래스에 이름을 지정할수도 있습니다. 이라는 인스턴스 변수를 추가함으로써 동적으로 할당하여 이름 스트링을 넣어줍니다. 정상적으로 컴파일 하면, 다음과 같은 메시지를 볼 수 있다. 위 코드에서는 이름 외에도 문제가 발생하게 되는데, 이는 이름을 넣어줄 때, 영역을 동적으로 생성해서 문자열을 복사했고, 이에 따라 동적으로 할당된 배열을 해 주어야 한다. 그러나 를 명확하게 지정하지 않으면, 기본적으로 가 되는 경우는 없다. 즉, 이에 대해 처리하지 않으…

September 08, 2022
study
CPP 스터디 00 - constructor

#생성자 #constructor #기본생성자 #default_constructor 함수 오버로딩(Overloading) C 에서는 라이브러리 상에서 함수 이름 1개다 한 개만 존재합니다(C 도 오버로딩이 있지 않나?) 하지만 C++에선 공시적으로 함수 이름이 중복이 되도 되며, 어떻게 구분할까요? 이런 케이스의 경우 어떤식으로 실행 결과가 나올까요? C++ 에서는 기본적으로 다른 타입의 자료형이 들어감에 따라 동일한 이름의 함수이어도, 이를 구분합니다. 동시에 위의 예시처럼 자기와 정확히 일치하는 인자를 가지는 함수가 없다면 ‘가장 근접한’ 함수를 찾아 실행하게 됩니다. C++ 컴파일러의 함수 오버로딩 과정 자신의 타입이 정확히 일치하는 함수를 찾는다. 일치 타입이 없으면 다음으로 형변환이 일어난다. , , 는 는 의 크기에 따라 or 은 은 위 세부 변환에서도 일치하는 타입이 없다면 좀더 포괄적인 형변환으로 일치하는 자료타입의 함수를 찾는다. 임의의 숫자 타입은 …

September 08, 2022
study
CPP 스터디 00 - obejective language

#object_oriented #object #class #access_identifier 모두의 코드 객체란? #객체 #추상화 #캡슐화 절차 지향 언어로 몇십년을 버텨온(?) 컴퓨터 공학은 객체 지향언어(Objected oriented language)를 발전시키게 되며, C++, Java Python, C# 등등 90년대 이후 등장한 대부분의 언어들이 객체지향언어 입니다. 그렇다면 무엇이 부족해서 절차 지향이 객체 지향의 스타일로 바뀔 필요가 있을까요? 구조체를 정의한 후, 변수를 만들어 이를 필요로 하는 함수들에게 이와 같이 전달해주었다고 가정해봅시다. 그런데 보이는 바처럼 함수에게 인자가 전달될 필요가 없었고, 개념적으로 마치 ”가 하는 것으로 보여집니다.” 따라서 이를 이렇게 바꾼다면 보다 명확하게 이해할 수 있을 것입니다. 이러한 구조가되면, animal을 인자로 play에 주지 않아도 됩니다. 논리적으로나 어떤 면으로나 animal은 자신의 상태를 알려주는 변수(v…

September 08, 2022
study
CPP 스터디 00 - reference

참조자의 도입 #CPP #reference #참조자 C에선 어떤 변수를 가리키고 싶을 땐, 반드시 포인터를 사용 해야 했으나, 이를 쉽게 해결하는 방법을 C++ 에서 제공하는 것 정수값 a 는 3으로 초기화 되어 있습니다. 그러나 여기서 참조자가 새롭게 정의 되어 있습니다. 참조자 기본형 : 예시에서는 그렇기에 위에서 a의 참조자로 another_a 가 지정되었으며, 이로써 값이 바뀌게 됩니다. 주의 : 레퍼런스는 반드시 처음에 누구의 별명이 될 것인지를 지정해야 합니다. 따라서 아래처럼 설정은 불가능합니다. 레퍼런스가 한 번 별명이 되면 절대로 다른이의 별명이 될 수 없습니다. 또한 레퍼런스는 메모리 상에 존재하지 않을 수도 있습니다. 이러한 경우 뭔가 문제가 있어 보인다. 어떤 타입기준으로 참조자 타입은 이며 따라서 이중으로 참조를 하게 되면, 로 하는게 맞을 것으로 보이며, 그 경우 z는 int&& 가 될 것처럼 생각된다. 하지만, 참조자의 참조자 라는 것은 말이 안되는…

September 08, 2022
study
OSTEP - 02. 운영 체제 소개

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 02. Introduction to Operating Systems 프로그램이 실행되면 무슨 일이 일어날까? : 가장 심플한 답은 아래와 같다. 들을 수행한다. 매초 마다 수백만회나, 프로세서들은 메모리에서 명령어를 가져오고(fetch), 이를 실행하고(execute), 한 명령어가 마무리 되면, 프로세서는 다음 명령어로 이동하며, 모든 작업이 마무리 될 때까지 계속 이어진다. 우리는 이 교재를 통해 프로그램의 동작을 배울 것이고, 프로그램이 동작하는 동안 아주 많은 다른 거친 일들이 작동하고 있음을 배울 것이다. 또한 이것의 주요 목적은 어디까지나 시스템을 사용하기 쉽게 만드는 것에 있다. 이러한 목적을 위한 소프트웨어의 몸통이 존재하고, 이 몸통은 프로그램들 사이에 메모리를 공유하거나, 프로그램과 장치 간의 상호작용을 가능케 하며, 여러 다른 재밌는 일들을 도와주는데 이…

September 07, 2022
study
OSTEP - 01.A Dialogue on The Book

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 시작 Q. 왜 이 책의 이름이 인가요? A. 이 책은 Richard Feynman 저서인 아주 유명한 물리학 책의 이름을 오마쥬 한 것입니다. 더불어 세개의 조각이라는 것은, 운영체제에서 중요하고도 좋은 주제 3가지를 의미합니다. Q. 그럼 조각들은 무엇들을 의미하나요? A. 세 조각의 키들은 , , 입니다. 우선 운영체제가 어떻게 동작하는지를 배울 것입니다. 여기에는 CPU 가 다음 무슨 파일을 실행할 지, 어떻게 가상 메모리 시스템 상에서 메모리 오버로딩을 대처하는 지, 디스크 상의 정보를 어떻게 관리하며, 부분들이 실패할 때 작동하는 구분된 시스템을 빌드하는 지 등을 포함합니다. Q. 그렇다면 이 책을 갖고 가상 좋은 학습 방법은 뭘까요? A. 좋은 질문입니다! 일단 각자 자기 스스로 이러한 내용들에 대해 파악하는 작업이 필요합니다. (교수님 말 잘 듣는다던지, 클래…

September 07, 2022
study
CPP 스터디 00 - Orthodox Canonical Form

관련 문서 원문 번역본 본 문서는 Flylib에서 설명하는 내용 의 번역본입니다. Orthodox Canonical class form(OCCF)은 적절한 클래스 디자인을 원한다면 사용 가능한 레시피입니다. 네개의 기초 객체 사용 컨텍스트 상에서 적절하게 작동하는 것을 보장해야하는 사용자 정의 데이터 타입을 선언할 때 당신이 구현할 필요가 있는 4가지 기능을 OCCF 는 표현하고 있습니다. 사용자 정의 타입 상에서 OCCF 를 사용함으로써, 객체의 사용에 관련된 상황적 인지도를 상승시킬 수 있습니다. 이러한 수행능력 상에서 OCCF는 객체의 적절한 행동을 위한 레시피일 뿐만 아니라, 근본적인 보다 더 고급 수준의 C++의 특징적인 구조체에 대한 이해도의 초석이 되어 줄 겁니다. OCCF에 대한 직관적인 이해도는 당신의 C++ 클래스 작성 수준을 끌어올려줄 것이며, 복잡함 속에서 어떻게 사용할지, 적절한 형태를 만들어줄 것입니다. Four Required Functions(요구되는 …

September 04, 2022
study
OSTEP - Prologue

프롤로그 CS 공부를 확신하다 CS 공부를 할 때마다 굉장한 불안감을 안고 있었다. 어딜 가도 CS 학습보단 급급하게 문제를 풀어나가고 만들기에 바쁘단 생각이 앞섰다. 42서울에서 학습을 해나가면서, 그런 사람들의 이야기를 들을 때면 인터뷰를 한다거나, 실제 현업에서 고생하는 사람들의 이야기는 다소 신빙성이 떨어지는 듯, 보일 때가 많았다. 현업에 계신 분들은 CS를 채워야 하는것이 가장 힘들고 곤욕스럽다고 한다. 그럼에도 온갖 미디어에서나, 42에서 취업에 열중인 이들은 컴퓨터를 이해하기보단, 컴퓨터로 무언가를 시키기에 바쁜 모습. 그리고 거기서 나는 어느 흐름을 타야 하느라 걱정되었다. 하지만 CSAPP 교재를 1독을 끝을 내고, 과제를 하나씩 하나씩 해결해나가면서 드는 느낌은 사뭇 내 불안이 확신이 되게 만드는 과정이었다고 생각한다. 컴퓨터는 최첨단을 달리는 존재이고, 그런 바탕에서 눈 한번 깜빡하고 젖힐 때, 놀라울 정도로 그 다음 영역으로 성장하고 있는 것이 느껴진다. 그…

September 03, 2022
study
CPP 스터디 00 - NamingConvention

원본링크 원본링크 UpperCamelCase UpperCamelCase 는 이름 짓는 컨벤션으로, 이름이 복수의 단어로 조합되면서도, 첫 글자가 대문자화된 형태를 띠는 것을 말합니다. 바리에이션으로 라는 것도 존재하고, 이는 UpperCamelCase와 구분되어 보이기 위한 방식의 일종입니다. 해당 방식이 가지는 이점은 이름이 공백 없이 연속적으로 이어져야 하는 체계를 가진 시스템 상에서, 훨씬더 의미를 부여하는 방법의 일환으로, 이름에 대한 제한 사항을 어기지 않으면서도, 좀더 의미를 정확히 부여하는 방식이란 점에서 나름의 의미가 있습니다. 해당 컨벤션은 현재는 매우 유명해져서, 전세계 규모로 권장받는 프로토콜의 역할을 하고 있습니다. 여러 종류의 이름 컨벤션들  or  . Also called , , , ,  and   or   or  ,  or   or  UpperCamelCase 여러 종류의 이름 컨벤션들

September 03, 2022
study
CPP 스터디 00 - usingnamespace

using namespace 개념 가 C++ 의 표준 라이브러리의 모든 함수, 객체등이 정의된 이름공간(namespace) 라고 합니다. 이라는 것이 굳이 추가된 이유는, 말 그대로 어떤 정의된 객체에 대해 어디에 소속인지를 명시적으로 선언해주는 역할을 합니다. 이는 코드 크기가 늘어 남에 따라, 다른 사람의 중복된 이름의 함수들이 많아졌고, 이러한 상황을 구분하기 위해 소속된 이름 공간이 다르면 다른 것으로 취급하기 위한 도구 입니다. 위의 예시에서 보이듯, 표준 라이브러리에 있는 을 쓰겠다는 말이 됩니다. 사용 방법 위와 같은 예시가 있다고 할 때, 자기 자신이 포함되어 있는 이름 공간 안에선 굳이 이름 공간 명시 없이 사용이 가능합니다. 이때 만약 의 를 호출한다면 이런 식으로 호출이 가능합니다. 동시에 어떠한 이름 공간에도 소속되지 않은 경우에는 다음처럼 명시적으로 이름 공간을 지정해서 명시적 구분으로 연결시켜 주어야 합니다. 위의 방식이 귀찮아서, 명시적으로 안쓰고, …

September 03, 2022
study
CPP 스터디 00 - STL

STL 원본 참고 링크_C++ STL 이란? 개념 : Standard Template Library의 약자 이다. 프로그래머가 자료구조와 알고리즘을 알지 못해도 사용할 수 있도록 제공되는 라이브러리이며, 편의도구라고 생각하면 될 듯 싶다. 즉, 가이드라인에서 명시하는 내용은, 해당 ‘라이브러리’만 잘 쓰면 된다- 로 해석하면 될 것으로 보입니ㅏㄷ. “당신에게는 모듈 08 안에서 STL의 사용만을 허락받습니다. 이 의미는 컨테이너(벡터, 리스트, 맵, 그 외에 것들)들은 안되며, 알고리즘( 헤더를 포함할 필요가 있는 어떤 것들)도 마찬가지입니다. 이것들을 사용하면 -42를 받게 됩니다.” 내부 개념 컨테이너 : 특정 타입의 원소들을 담아 다루기 위한 객체 ex) list, vector, map, deque, multimap 등… 반복자iterator 컨테이너가 보유한 내부 데이터 순회 가능한 객체, 컨테이너의 특정 위치를 나타냅니다. 근래의 객체지향 언어에서 편리한 자료구조가 지원 …

September 02, 2022
study
CPP 스터디 00

다시 시작 하는 블로그… 몇 번째냐 ㅋㅋ… 여러가지 생각을 해봤다. 쉽지 않은 생각이긴하지만 허허.. 블로그, 기술블로그를 운영하겠다고 마음 먹었었다. 하지만 바쁜 42생활, 몰려오는 블랙홀과 함께 어떤 식으로 학습을 해야 하는지 라던지, 취업과 관련된 활동들을 하다보니 이제서야 다시 정신을 차리고 이렇게 블로그를 신경써보려고 한다. 사실 목표는 그렇다. 누군가에게 도움이 되는, 나름 오픈 소스 정신이 고 생각한게 아니었는데… 그럼에도 불구하고 다른 것들을 하다보니 자연스럽게 뒤로 밀렸던 것들이 참 가슴이 아프다 ㅋㅋ.. 여하튼, 미니쉘에서 정신을 놔 버리고, 그 뒤 정신없이 벌써 1달이 지났기에, 멘탈 붙잡고 다시 블로그를 유익한 공간으로 만드려고 한다. 핵심 포인트는 역시 ‘도움이 되는 정보’와 ‘고민’이 녹아 있냐. 블로그를 볼 때마다 떠올려야 할 것 같다. 그냥 단순한 정보만 쌓여 있는게 아니라, 그렇다고 잡소리만 한 가득이 아닌, 진짜가 되기 위한 몸부림을 적어보려고 한…

September 02, 2022
study
Git memo, 깃 고수가 되어보자_2

프롤로그 이 글은 앞으로 쓸 예정인 필로소퍼, 미니쉘에 대한 회고 기록, 학습 기록을 남기기 앞서 다시 블로그 관리에 시동을 거려는 나름의 처절한 몸부림(…) 입니다. 협업으로 학습과 개발을 해보니, 자연스레 저보다 깃에 익숙한 팀원에게 사실상 깃 관리를 맡겼었습니다. 하지만 아무래도 관리적으로 아쉬운 점이나, 깃의 제대로된 활용(?) 에 있어서 배워야 한다는 생각, 보완을 어떻게 하면 좋을까? 하는 생각을 하게 되었습니다. 따라서 협업에서 충분한 숙지가 필요한 ‘깃’이라는 협업 관리 툴에 대한 이해도를 높이고, 유용한 기능들을 놓치지 않기 위해 정리하는 글입니다. 사실은 이런 글을 굳이 적을 필요가 없다? 는 생각도 한 켠에 들긴 했습니다. 사실상 모든 기능들이나, 개념은 매뉴얼을 참조하면 되고, 커맨드 몇 번 입력하면 되니… 그러나 막상 팀업으로 빌드가 이어지는 와중에 그런 식으로 맥을 끊는 고민들이 발생하는게, 상당히 안 좋다는 걸 느꼈습니다. 개발 흐름을 끊기도 하고, 무엇…

July 26, 2022
study
Re) Minishell을 다시 돌아보며

Reminding : Minishell Introducing Minishell 42서울. 2022년 11월 들어가게 된 이 공간에서 나는 기어코 살아남았고, 버텼고, 내 나름의 자신감을 가질 만큼 많은 내용을 밤낮을 가리지 않고 배울 수 있었다. 지속적으로 학습한 내용 중 중요하다고 생각하는 부분들에 대해 남겨왔다. 그런데 그러던 와중 드디어 약 두개 정도 과제가 남고, 정규 공통과정을 마무리 짓기 얼마 남지 않은 시점까지 와버렸다. 생각보다는 빠르게, 생각보다는 느린 듯 여러 생각이 교차되는 도중에 곰곰히 생각해보았다. 나를 남기고 나를 알리고, 내 능력을 보여줘야 하는데, 내 모습이나 내가 누군가야 자기소개서를 통해, 인터뷰릍 통해 충분히 기회가 있다지만 내 실력은? 거기서 다시 그런 글들을 적는 시간도 필요하겠구나 하는 생각이 들었다. 결국 내가 나름 다양한 일들을 하면서 살았지만, 이제 실력과 노하우, 깊이감으로 21세기스럽게 ‘만든다’ 를 하겠다고 나섰는데, 이러한 나를…

July 15, 2022
42seoul
etc
Git memo, 깃 고수가 되어보자

프롤로그 이 글은 앞으로 쓸 예정인 필로소퍼, 미니쉘에 대한 회고 기록, 학습 기록을 남기기 앞서 다시 블로그 관리에 시동을 거려는 나름의 처절한 몸부림(…) 입니다. 협업으로 학습과 개발을 해보니, 자연스레 저보다 깃에 익숙한 팀원에게 사실상 깃 관리를 맡겼었습니다. 하지만 아무래도 관리적으로 아쉬운 점이나, 깃의 제대로된 활용(?) 에 있어서 배워야 한다는 생각, 보완을 어떻게 하면 좋을까? 하는 생각을 하게 되었습니다. 따라서 협업에서 충분한 숙지가 필요한 ‘깃’이라는 협업 관리 툴에 대한 이해도를 높이고, 유용한 기능들을 놓치지 않기 위해 정리하는 글입니다. 사실은 이런 글을 굳이 적을 필요가 없다? 는 생각도 한 켠에 들긴 했습니다. 사실상 모든 기능들이나, 개념은 매뉴얼을 참조하면 되고, 커맨드 몇 번 입력하면 되니… 그러나 막상 팀업으로 빌드가 이어지는 와중에 그런 식으로 맥을 끊는 고민들이 발생하는게, 상당히 안 좋다는 걸 느꼈습니다. 개발 흐름을 끊기도 하고, 무엇…

July 13, 2022
study
17_Lemon-sized luxury boxes

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. Lemon-sized luxury boxes 이 집 꺾기 연출이 굉장히 맛집이다… 이메일로 비즈니스 식으로 보내면 된다고 하는데, 카페베네로 마지막 장면 끊어서 궁금하게 만들듯이 사람을 궁금하게 만든다.. 흥미 진진… 이전에 수출 수입관련하여 일을 할 때 이런 표현을 쓰진 않았었다. 그만큼 개념 없이 행동했다고 보여지기는 한다. 이런 발주 관련 표현은 기억해 놓으리라. 주요 영단어나 표현 정리 I’d like to place an order for… : 공손하게 발주를 요청하는 표현, 핵심은 가 , 라는 표현으로 해석하면 된다. We’re going t…

June 23, 2022
study
16_Slimy Limey

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. Slimey Limey 그러게 느끼하게 작업을 걸면 안되지… 정중한 거절 표현들은 알아두면 좋을 것으로 보여서 메모해둔다. 더불어 동서고금을 막론하고 변명의 최고봉은 자기가 속한 곳을 언급하는게 아닌가(…) 하는 생각이 들었다. 주요 영단어나 표현 정리 Thank you for your offer. But I’m really sorry, I won’t be able to : 정중하게 거절하기 표현 (1) I’m afraid it is against company policy… : 정중하게 거절하면서 변명으로 회사를 언급하기(2) It wouldn’t be…

June 23, 2022
study
15_Seb Lime

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. Seb Lime 처음엔 영어 단어 표현인 줄 알았는디, 내용중에 찝쩍되는 남자 이름일줄이야… (?!) 영어식 전화, 특히나 비즈니스 시 영어 표현에 대한 내용이었다. 회사 생활 하면서 전화 매너를 배워봤다면 익숙한 표현이다. 오히려 한국어로 된 표현들이 결국 영어식 표현의 번역인건가 싶다. 주요 영단어나 표현 정리 Hello? Tip Top Trading. This is Anna speaking. : 전화 받을 때 Hello? Anna speaking. : 동일하게 전화 받을 때지만, 통성명이 어느정도 되어 상대를 알 때 Hello Mrs Smith, how…

June 21, 2022
study
14_Telephone tell-tale

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Imperial Lemon 후… 미니쉘 하면서 다른 공부하기 정말 힘드네… 고민해본 결과 핵심적인 내용을 제외하고 굳이 영어를 적거나 해석해가면서 하는건 시간낭비 같아 빠르게 빠르게 진행하자. ps. 역시 영미권인가, 거의 성희롱하는 것 같은 상사 목소리가 기냥 필터링 없이 꽂히네…ㅋㅋ 주요 영단어나 표현 정리 I’m a little bit concerned about : 공손한 우려표현(혹은 불만 표현) You need to work on … : 공손한 행동 바꾸기 요청 표현 Perhaps you should think about : 공손하게 태도를…

June 20, 2022
study
13_The Imperial Lemon

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Imperial Lemon 후… 미니쉘 하면서 다른 공부하기 정말 힘드네… 고민해본 결과 핵심적인 내용을 제외하고 굳이 영어를 적거나 해석해가면서 하는건 시간낭비 같아 빠르게 빠르게 진행하자. ps. 역시 영미권인가, 거의 성희롱하는 것 같은 상사 목소리가 기냥 필터링 없이 꽂히네…ㅋㅋ 주요 영단어나 표현 정리 fast-forward : 미국식은 ㅐ 발음이지만, f 이후 ㅏ 발음으로 읽는다. The compony has a strong track record of … Let me share with you… The Imperial Lemon’s key…

June 20, 2022
study
다음을 고민하는 나의 몸부림을 보아라...!

다음을 고민하는 나의 몸부림을 보아라…! 42서울 6개월 차 카뎃이 남겨보는 생존일기 제목이 너무 중2병 스럽지 않나- 생각해보기는 했다. 하지만 다른 이름이 떠오르진 않았다. 마치 일본의 라노벨 같으면서도, 어딘가의 운동가가 선동하듯 온점 3개와 느낌표 한 개가 만들어주는 힘은, 생각보다 마음에 들었기에 그대로 써 보기로 했다. 중2병이긴 하지만, 나쁘지 않지 않은가? 세상에 중2병 한 명정도 있어도 세상은 잘 돌아가니까. 작년 11월, 42서울에 처음 카뎃이 되어 들어왔을 때 눈 앞에 펼쳐진 당혹감, 동시에 뭔지 모를 열정은 정말 충만했다. 아무 것도 모르고, C의 기본 겨우 땐 듯 보이는 내 상황에서 뭐가 그리 자신감이 넘쳤는지, 혹은 교만했는지는 모르겠지만 그런 시작이 굉장히 기대되었었고, 실제로 본 과정에 들어갔다는 사실 정도만으로도 나는 프로그래머가 된 기분이었다. 하지만 생각해보면 그렇다. 정신없이 달려오면서 과연 언제 한 번 제대로 정리했던가? 그렇진 못했다. 바쁘다…

June 17, 2022
etc
12_The big day

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse P.S) iframe 이 정상작동을 하지 않아 영상은 없이 대본 번역만 올리도록 합니다 ㅠ. 내용 해석 Hello, welcome to the offices of Citrus Ventures! 안녕하세요. Citrus Ventures 의 사무실에 오신 것을 환영합니다. It’s a big day for Anna, she’s about to present Tip Top Trading’s new Imperial Lemon to Mr Lime and his colleagues. This must not go wrong. 오늘은 Anna에…

June 16, 2022
study
11_Overtime

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse 영단어나 표현 정리 burning the candle at both ends : 영어로 의미 표현은 다음과 같이 적혀 있다. “to work or do other things from early in ther morning until late at night and so get very little rest” 출처 doing overtime : 당연한 표현이지만 밤새 행동했음을 의미한다. putting in the hours : 수시간을 때려 넣었다는 표현을 하고 싶은 것으로 보인다. burning out : 번 아웃 lady-cur…

June 15, 2022
study
10_The brainstorm

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse 핵심 메모 “But people might think there’s something wrong with our lemons and that we’re desperate to get rid of them.” 위 표현에서 후반부분이 굉장히 발음이 연결되어 있어서 혀가 오랜만에 아파왔다. 월-데스퍼ㄹ트겟륏돕뎀 … 영단어나 표현 정리 I’ve got to do a good job but it’s going to take me ages.(링크) 시간이 굉장히 걸린다, 나이를 먹었다 등.. 약간 드립성 표현 인상적. 딱히 비즈니스적 용어는 아…

June 14, 2022
study
09_The Warehouse

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse 핵심 메모 영국식 발음이 오랜만이라 소리가 상당히 어색했고, 내가 그렇게 하려고 해도 입에서 미국식 억양이 튀어나온다. BBC 영어로 시작한 만큼 영국식 영어 악센트(r, t, d)가 아직 적응이 잘 안되는 느낌이다. 영단어나 표현 정리 sorry to bother you overalls : 멜빵바지 입는 작업복 // 전체적인 상황을 표현하는 것 처럼보이기도 한다. Brown shoes don’t look right on him! He’s not a brown shoe sort of person… : 이 말의 의미를 잘 모르겠다. 직…

June 13, 2022
study
알고리즘 박살내기 - 41. 개발형 코딩 테스트

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다… 개발형 코딩 테스트 개념 정해진 목적에 따라서 동작하는 완성된 프로그램을 개발하는 것이 목표인 코딩테스트 유형입니다. 알고리즘 코딩 테스트 vs 개발형 코딩 테스트 알고리즘 형 시간 복잡도 분석 공간 복잡도 분석 개발 형 완성도 높은 하나의 프로그램을 개발 모듈을 적절히 조합하는 능력을 요구 일부 기업은 해커톤을 통해 채용을 진행하기도 합니다. 해커톤(Hackaton)이란 단 기간에 아이디어를 제품화 하는 프로젝트 이벤트 입니다. 대게 1 ~ 2일 정도 진행되며 다수의 해커톤이 대회 형식을 빌려 해커톤이 끝나면 프로그램을 시연하고 발표하고, 채점을 진행하는 형태입니다. 이러한 개발형 코딩테스트는 분야나 직군별…

June 02, 2022
algorithm
알고리즘 박살내기 - 40. 기타 알고리즘(구간 합 빠르게 계산하기)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다… 기타 알고리즘 : 구간 합 빠르게 계산하기 구간 합(Interval Sum) 구간 합 문제 : 연속적으로 나열된 N개의 수가 있을 때 예를 들어 5개의 데이터로 구성된 수열 {10, 20, 30, 40, 50} 이 있다고 가정 시, 두 번째 수부터 네 번째 수까지의 합은? → 20 + 30 + 40 = 90 입니다. 선형 탐색이 가능하나, 이러한 요구가 여러번 들어올 때 처리하는 방법을 배워 봅시다. 구간 합 빠르게 계산하기 문제 설명 N개의 정수로 구성된 수열이 있습니다. M개의 쿼리(Query) 정보가 주어집니다. 각 쿼리는 왼쪽(left)과 오른쪽(right)으로 구성됩니다. 각 쿼리에 대하여 [left…

June 02, 2022
algorithm
알고리즘 박살내기 - 39. 기타 알고리즘(투 포인터)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다… 기타 알고리즘 : 투 포인터(Two Pointers) 개요 투 포인터 알고리즘은 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘을 의미합니다. 예를들어 2, 3, 4, 5, 6, 7번 학생을 지목한다고 할 때, 간단하게 2번부터 7번까지의 학생이라고 지목하면, 그 특정 범위 전체를 의미하게 됩니다. 리스트에 담긴 데이터에 순차적으로 접근해야할 때 시작점과 끝점 2개의 점으로 접근할 데이터의 범위를 표현할 수 있습니다. 특정한 합을 가지는 부분 연속 수열 찾기 문제 설명 N개의 자연수로 구성된 수열이 있다고 할 때, 합이 M인 부분 연속 수열의 개수를 구해보세요. 수행 시간…

June 01, 2022
algorithm
알고리즘 박살내기 - 38. 기타 알고리즘(에라토스테네스의 체)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다… 기타 알고리즘 : 에라토스테네스의 체 다수의 소수 판별 하나의 수에 대해서 소수 여부를 판단하는 방법과 달리, 다수의 소수를 찾아야 하는 경우에는 알고리즘을 사용해야 합니다. 에라토스테네스의 체 알고리즘 다수의 자연수에 대하여 소수 여부 판별을 하는 대표적 알고리즘입니다. 에라토스테네스의 체는 N 보다 작거나 같은 모든 소수를 찾을 때 사용하면 됩니다. 구체적인 동작 과정은 다음과 같습니다. 2부터 N까지 모든 자연수를 나열합니다. 남은 수 중 아직 처리하지 않은 가장 작은 수 i를 찾습니다. 남은 수 중 i의 배수를 모두 제거합니다(i는 제거하지 않습니다.) 더 이상 반복할 수 없을 때까지 2, 3과정을 …

May 31, 2022
algorithm
알고리즘 박살내기 - 37. 기타 알고리즘(소수 판별 알고리즘)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다… 기타 알고리즘 : 소수 판별 알고리즘 소수(Prime Number) 소수란 1보다 큰 자연수이지만, 1과 자기자신을 제외한 자연수로 나누어 떨어지지 않는 자연수입니다. 예를 들어, 6은 1, 2, 3, 6으로 나누어 떨어지므로 소수가 아닙니다. 7은 1, 7을 제외하고 어떤 수로도 나누어 떨어지지 않으니 소수입니다. 코딩 테스트에서는 어떠한 자연수가 소수인지 아닌지 판별해야 하는 문제가 자주 출제 됩니다. 소수의 판별 : 기본적인 알고리즘 Python C++ 기본 알고리즘의 성능 분석 2부터 x - 1까지의 모든 자연수에 대해서 연산을 수행합니다. -> 모든 수를 하나씩 확인한다는 점에서 시간복잡도는 𝑂(𝑋)…

May 30, 2022
algorithm
알고리즘 박살내기 - 36. 기타 그래프 이론(위상정렬)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다… 기타 그래프 이론 : 위상정렬 위상 정렬의 개요 사이클이 없는 방향의 그래프의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열하는 것을 의미합니다. 예시) 선수과목을 고려한 학습 순서 설정 고급 알고리즘은 양쪽 과목을 모두 배운다는 조건이 성립되어야 한다. 위 세 과목을 모두 듣기 위한 적절한 학습 순서는? 자료구조 ➡︎ 알고리즘 ➡︎ 고급 알고리즘 (O) 자료구조 ➡︎ 고급 알고리즘 ➡︎ 알고리즘 (X) 진입차수와 진출차수 그래프 관련하여 알아두면 좋은 개념으로 먼저 소개하겠습니다. 진입차수(Indegree): 특정한 노드로 들어오는 간선의 개수 진출차수(Outdegree): 특정한 노드에서 나가는 간선의 개수…

May 27, 2022
algorithm
알고리즘 박살내기 - 35. 기타 그래프 이론(크루스칼 알고리즘)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 기타 그래프 이론 : 크루스칼 알고리즘 신장 트리 그래프에서 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미합니다. 모든 노드가 서로 연결되면서 사이클이 존재하지 않는다는 조건의 트리 조건입니다. 이 특징을 요구하는 상황에서 효과적일 수 있습니다. 오른쪽은 1번 노드가 포함되지 않으므로 신장트리가 아니고, 사이클 발생하기에 신장트리가 아닙니다. 최소 신장 트리 위의 개념을 사용하는 경우는 어떤 경우일까요? 예시 ) N개의 도시가 존재하는 상황에서 두 도시 사이에 도로를 놓고 전체 도시가 서로 연결될 수 있게 도로를 설치해야 합니다. 최소에, 그러나 순환하지 않는 노드 연결을 요구할 때 쓰면 …

May 26, 2022
algorithm
알고리즘 박살내기 - 34. 기타 그래프 이론(서로소 집합을 활용한 사이클 판별)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 기타 그래프 이론 : 서로소 집합을 활용한 사이클 판별 개념 설명 사이클에 대한 내용은 그래프 개념에 대한 이해가 필요합니다. 이에 대한 개념관련 정보는 이 링크를 확인해 주세요. 사이클이란?(Cycle) : 어떤 정점에서 시작하여 다시 자신에게 돌아오는 경로가 있는 경우 이를 **사이클(cycle)**이라고 합니다. 서로소 집합은 무방향 그래프 내에서 사이클을 판별할 때 사용할 수 있습니다. 참고록 방향 그래프에서의 사이클 여부는 DFS를 이용하여 판별 할 수 있습니다. 사이클 판별 알고리즘은 다음과 같습니다. 각 선을 하나씩 확인하여 두 노드의 루트 노드를 확인합니다. 루트 노드가 서로 다르다면 두 노드의…

May 25, 2022
algorithm
알고리즘 박살내기 - 33. 기타 그래프 이론(서로소 집합 자료구조)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 기타 그래프 이론 : 서로소 집합 자료구조 서로소 집합 서로소 집합(Disjoint Sets)란 공통 원소가 없는 두 집합을 의미합니다. 서로소 집합 자료구조 서로소 부분 집합들로 나누어지 원소들의 데이터를 처리하기 위한 자료구조입니다. 서로소 집합 자료구조는 두 종류의 연산을 지원합니다. 합집합(Union) : 두 집합의 원소들이 모두 포함된 하나의 집합으로 합치는 연산. 찾기(Find) : 특정 원소가 속한 집합을 알려주는 연산. 서로소 집합 자료구조는 합치기 찾기(Union Find) 자료구조라고도 불립니다. 여러 합치기 연산이 주어질 때 서로소 집합 자료구조의 동작 과과정 합집합 연산으로 연결된 두 …

May 23, 2022
algorithm
알고리즘 박살내기 - 32. 최단 경로 알고리즘 기초 문제 풀이

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 전보 문제 설명 어떤 나라에 N개의 도시가 있습니다. 각 도시는 보내고자 하는 메시지가 있고, 다른 도시로 전보를 보내 다른 도시로 해당 메시지를 전송합니다. 하지만 X라는 도시에서 Y라는 도시로 전보를 보내고자 하면, 도시 X에서 Y로 향하는 통로가 설치되어있어야합니다. 예를 들어 X에서 Y로 향하는 통로는 있지만, Y에서 X로 향하는 통로가 없다면 Y는 X로 메시지를 보낼 수 없습니다. 또한 통로를 거쳐 메시지를 보낼 때는 일정 시간이 소요됩니다. 어느날 C라는 도시에서 위급 상황이 발생했습니다. 그래서 최대한 많은 도시로 메시지를 보내고자 합니다. 메시지는 도시 C에서 출발하여 각 도시 사이에 설치된 통…

May 23, 2022
algorithm
알고리즘 박살내기 - 31. 플로이드 워셜 알고리즘 개요

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 플로이드 워셜 알고리즘 개요 개념 모든 노드에서 다른 모든 노드까지의 최단 경로를 모두 계산합니다. 플로이드 워셜(Floyd-Warshall) 알고리즘은 다익스트라 알고리즘과 마찬가지로 단계별로 거쳐가는 노드를 기준으로 알고리즘을 수행합니다. -> 매 단계마다 방문하지 않은 노드 중에 최단 거리를 갖는 노드를 찾는 과정이 필요하지 않습니다. 플로이드 워셜은 2차원 테이블에 최단 거리 정보를 저장합니다. 다이나믹 프로그래밍 유형에 속합니다. (점화식을 활용한 3중 반복문을 통해 구현이 이루어집니다.) 난이도는 쉽지만, 그만큼 시간 복잡도가 𝑂(𝑁³)가 되는 만큼, 노드의 개수가 많아지고, 간선의 개수가 많다면 …

May 18, 2022
algorithm
알고리즘 박살내기 - 30 - 2. 최단 경로 알고리즘(2)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 최단 경로 알고리즘 개념 최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘을 의미합니다. 다양한 문제 상황 한 지점에서 다른 한 지점 까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 각 지점의 그래프에서 노드로 표현됩니다. 각 지점 간 연결된 도로는 그래프에서 간선으로 표현합니다. 노드 형태 예시 간단한 구현 방법의 성능 분석 지난 포스팅에서 정리했던 간단한 구현 방법의 경우 선형 탐색으로 하나씩 확인하는 방식이었습니다. 그러다보니 최단 경로 알고리즘으로써 시간 복잡도는 전체 원소 개수의 제곱으로 나타나게 되면서 상당한 코스트가 소모됨을 보여주었…

May 17, 2022
algorithm
알고리즘 박살내기 - 30 - 1. 최단 경로 알고리즘(1)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 최단 경로 알고리즘 개념 최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘을 의미합니다. 다양한 문제 상황 한 지점에서 다른 한 지점 까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 각 지점의 그래프에서 노드로 표현됩니다. 각 지점 간 연결된 도로는 그래프에서 간선으로 표현합니다. 노드 형태 예시 다익스트라 최단 경로 알고리즘의 개요 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산합니다. 다익스트라 최단 경로 알고리즘은 음의 간선이 없을 때 정상 동작합니다. (현실세계 처럼 동작하며, 실 세계에서 사용 가능합니다.) 다익스트라 …

May 16, 2022
algorithm
알고리즘 박살내기 - 29 - 2. 다이나믹 프로그래밍 기초 문제 풀이 (2)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 효율적인 화폐 구성 문제 설명 N가지 종류의 화폐가 있습니다. 이 화폐들의 개수를 최소한으로 이용해서 그 가치의 합이 M 원이 되도록 하려고 합니다. 이때 각 종류의 화폐는 몇 개라도 사용할 수 있습니다. 예를 들어 2원, 3원 단위 화폐가 있을 때는 15원을 만들기 위해 3원을 5개 사용하는 것이 가장 최소한의 화폐 개수 입니다. M원을 만들기 위한 최소한의 화폐 개수를 출력하는 프로그램을 작성하세요. 문제 조건 난이도 : 중상 풀이시간 : 30분 시간 제한 : 1초 메모리 제한 : 128MB 입력 조건 : 첫째 줄에 N, M이 주어진다. (1<= N <= 100, 1 <= M <= 10,000) 이후 N개…

May 13, 2022
algorithm
알고리즘 박살내기 - 29 - 1. 다이나믹 프로그래밍 기초 문제 풀이 (1)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 개미 전사 문제 설명 개미 전사는 부족한 식량 창고를 몰래 공격하려고 합니다. 메뚜기 마을에는 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있습니다. 각 식량창고에는 정해진 수의 식량을 저장하고 있으며, 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 에정입니다. 이때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식량창고가 공격을 받으면 바로 알아 챌 수 있습니다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량을 약탈하기 위해선 최소 한 칸 이상 떨어진 식량창고를 약탈해야 합니다. 예시 창고 0 창고 1 창고 2 창고 3 1 3 1 5 창고 0을 골라서 약탈을 한다…

May 12, 2022
algorithm
알고리즘 박살내기 - 28. 다이나믹 프로그래밍 개요

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 다이나믹 프로그래밍 개념 다이나믹 프로그래밍이란 메모리를 적절히 사용하여 수행시간 효율성을 비약적으로 향상시키는 방법입니다. 이미 계산된 결과(작은문제)는 별도의 메모리 영역에 저장하고, 다시 계산하지 않도록 합니다. 다이나믹 프로그래밍 구현은 일반적으로 , 의 두 가지 방식으로 구성됩니다. 다이나믹 프로그래밍은 동적 계획법이라고도 부릅니다. 일반적으로 동적(Dynamic)이란 단어의 프로그래밍 분야에서의 의미는? 자료구조에서 동적 할당(Dynamic Allocation)이란 ‘프로그램 실행 도중에 실행에 필요한 메모리를 할당하는’ 기법을 의미합니다. 이에 비해 다이나믹 프로그래밍에서 ‘다이나믹’은 별다른 의…

May 11, 2022
algorithm
알고리즘 박살내기 - 27. 이진 탐색 기초 문제 풀이

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 이진 탐색 알고리즘 기초문제 풀이 떡볶이 떡 만들기 문제 설명 오늘 동빈이는 여행 가신 부모님을 대신해서 떡집 일을 하기로 했습니다. 오늘은 떡볶이 떡을 만드는 날입니다. 동빈이네 떡볶이 떢은 재밌게도 떡볶이 떡의 길이가 일정하지 않습니다. 대신 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰줍니다. 절단기 높이(H)를 지정하면 줄지어진 떡을 한 번에 절단합니다. 높이가 H보다 긴 떡은 H 위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않습니다. 예를 들어 높이가 19, 14, 10, 17cm 떡이 나란히 있고 절단기 높이를 15cm 로 지정하면 자른 뒤 떡의 높이는 15, 14, 10, 15cm가…

May 10, 2022
algorithm
알고리즘 박살내기 - 26. 이진 탐색 개요

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 이진 탐색 알고리즘 개념 순차 탐색 : 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 (시작점, 끝점, 중간점을 이용하여 탐색 범위 설정 방법) ➡︎ 이렇게 탐색을 구현할 경우, 탐색 연산의 시간복잡도를 로그단위로 떨어뜨릴 수 있어 탐색 시 유효합니다. 이진 탐색 동작 예시 이미 정렬된 10개의 데이터 중에서 값이 4인 원소를 찾는 예시 ⬇︎ 0 2 6 8 10 12 14 16 18 step 1 : 시작점(0), 끝점(9), 중간점(4, 소수점 이하는 제거)로 설정합…

May 09, 2022
algorithm
알고리즘 박살내기 - 25. 정렬 알고리즘 비교 및 기초 문제 풀이

덧! 중간에 공부한 내용을 빼먹고 진도를 나가(…) 순서를 맞추기 위해 부득이하게 data를 수정했습니다 ㅠ.. 실제 학습일 : 2022.05.06 Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 정렬 알고리즘 비교하기 비교 앞서 다룬 네 가지의 정렬 알고리즘을 비교하면 아래와 같습니다. 추가적으로 대부분의 프로그래밍 언어에서는 지원하는 표준 정렬 라이브러리는 최악의 경우에도 O(NlogN)을 보장하도록 설계되어있습니다. 정렬 알고리즘 평균 시간 복잡도 공간 복잡도 특징 선택 정렬 O(N^2) O(N) 아이디어가 매우 간단합니다. 삽입 정렬 O(N^2) O(N) 데이터가 거의 정렬되어 있을 때는 가장 빠릅니다. 퀵 정렬 O(NlogN) O(N) 대부분의 경…

May 09, 2022
algorithm
알고리즘 박살내기 - 24. 계수정렬

덧! 중간에 공부한 내용을 빼먹고 진도를 나가(…) 순서를 맞추기 위해 부득이하게 data를 수정했습니다 ㅠ.. 실제 학습일 : 2022.05.05 Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 계수정렬 개념 특정 조건이 부합한 경우에만 사용 가능한 정렬로, 매우 빠른 동작의 정렬 알고리즘입니다. 계수 정렬은 데이터의 크기 범위가 제한되어 로 표현할 수 있을 때까지만 사용 가능합니다. 데이터의 개수가 N, 데이터(양수)중 최대값이 K일 때 최악의 경우에도 수행시간은 O(N + K)를 보장합니다. 공간복잡도 면에서는 데이터의 범위만큼 배열을 만들어 기록해놔야 하므로 비효율적일 순 있으나, 조건만 만족한다면 매우 빠른 속도로 처리가 가능하다는 장점을 갖고 있…

May 09, 2022
algorithm
알고리즘 박살내기 - 23. 퀵정렬

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 덧 중간에 뻬먹어서 재 포스팅합니다 ㅎㅎ! 퀵정렬 개념 기준 데이터를 설정하고, 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법입니다. 일반적인 상황에서 가장 많이 사용되는 정렬 알고리즘 중 하나입니다. 병합정렬과 더불어 프로그래밍 언어 정렬 라이브러리의 근간이 되는 알고리즘입니다. 가장 기본적인 퀵 정렬은 **첫 번째 데이터를 기준 데이터(Pivot)**으로 설정합니다. 퀵 정렬 동작 예시 Step 0 피봇 값은 5, 왼쪽 부터 큰 데이터를 선택하므로 7이 되고 오른쪽부터 5보다 작은 값을 선택하므로 두 데이터 위치를 서로 변경합니다. pivot ➡︎ ⬅︎ 9 0 3 1 6 2 8 …

May 09, 2022
algorithm
개발을 모르는 카뎃이 적어보는 WIS2022 후기

Introduce World IT show 2022 전경 2016년 1월 20일 사람들은 놀라움과 당혹감을 맞이했습니다. 이세돌 9단과 사람이 만든 인공지능 ‘알파고’의 대결. 바둑의 경우의 수는 대략 10의 171제곱이 되는데, 알파고는 인간의 지적 능력을, 복합적 사고능력을 갖추는 데 성공했다는 증거를 보여줍니다. 또 2020년 보스턴 다이내믹스(Boston Dynamics)는 로봇 ‘스팟’을 공개, 2020년 6월 ‘상업적’ 판매를 본격적으로 시작하면서 인간이 생각하는 다양한 기능을 할 수 있는 다목적성 로봇이 현실화, 상업화되었습니다. 이 밖에도 단백질 폴딩을 예측하는 것이 가능케 된 인공지능 알파폴드2(Alphafold2)는 현대 의학 50년 동안 풀리지 않던 단백질 접힘 문제의 실마리를 찾았습니다. 또한 AI-GPT3 라는 오픈AI는 자연어 처리 AI로 개발되었고 스스로 모르는 언어임에도 학습하여 성공적인 코딩을 작업을 보여주었습니다. 해당 AI를 활용하여 문학작품을 작…

May 08, 2022
etc
알고리즘 박살내기 - 22. 삽입정렬

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 삽입정렬 개념 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입합니다. 선택 정렬에 비해 구현 난이도가 높은 편이지만, 일반적으로 더 효율적으로 동작합니다. 삽입 정렬 동작 예시 step 0 : 0번 데이터 ‘7’은 정렬되어 있다고 판단, 두 번째 데이터 ‘5’ 가 어떤 위치로 들어갈지 판단합니다. ⇒ 7을 기준으로 왼쪽, 오른쪽 두 경우 중 어느 경우인지 판단합니다. step 1: 이어서 9가 어떤 위치로 들어갈지 판단합니다. ⇒ 차례대로 왼쪽 데이터와 비교하여 더 작으면 자리를 바꿉니다. step 2 : 0을 값의 왼쪽가 비교하여 위치를 확인하고, 원소를 바꿔가면서 들어갈 자릴 판단합니다. 이러…

May 03, 2022
algorithm
알고리즘 박살내기 - 21. 선택정렬

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 선택정렬 정렬 정렬(sorting)이란 데이터를 특정 기준에 따 순서대로 나열한 것을 말합니다. 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘이 공식처럼 사용됩니다. 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복합니다. 동작 순서 처리되지 않은 데이터 중 가장 작은 데이터를 선택해, 최상단으로 옮깁니다. 처리 되지 않은 데이터 중 가장 작은 데이터를 선택해서, 이전에 정렬된 가장 작은데이터를 제외하고, 그 다음 위치와 자리를 바꿉니다. … 이런 식으로 계속 반복하여 정렬되지 않은 데이터의 배열의 끝 - 1 까지 정렬을 마무리 지으면 정렬이 마…

May 02, 2022
algorithm
알고리즘 박살내기 - 16-2 큐 자료구조

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 자료구조 추가 학습 본 내용은 정리를 하던 도중 파이썬 내장 함수들 및 추가적으로 알아야 할 것들을 정리 할 겸, 쉴 겸 겸사겸사 작성해보는 포스트입니다. 위키 및 파이썬 공식문서들을 참조하여 정리한 내용입니다. 더불어 기본 개념은 16번 포스트를 참조 부탁드립니다 ㅎㅎ; 주된 참고 링크는 여기 입니다. 큐 개념 설명 스택처럼, 큐는 일렬의 구조체이며, 이것은 작업이 수행되는 특정 순서에 따라 구성되어 있습니다. 선입선출(FIFO)의 구조를 갖고 있으며, 최초의 주문이 처음으로 손님에게 제공되는 것과 같은 구조라고 보시면 됩니다. 스택과 큐의 차이점은 제거하는 것에 있어서 차이를 보입니다. 스택 자료구조는 가…

April 29, 2022
algorithm
알고리즘 박살내기 - 20. DFS/BFS(기초 문제 풀이)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 음료수 얼려먹기 N × M 크기의 얼음 틀이 있습니다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시됩니다. 구멍이 뚫려있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주합니다. 이때 얼음틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하세요. 다음 4 × 5 얼음틀의 예시에서는 아이스크림이 총 3개 생성됩니다. 연결요소 찾기의 유형과 유사합니다. 해당 그림을 참고하면 덩이는 총 3덩이가 구성될 수 있다. 문제 조건 난이도 : 중 풀이시간 : 30분 시간제한 : 1초 메모리 제한 : 128MB 입력조건 : 첫번째 줄에 얼음 틀의…

April 29, 2022
algorithm
알고리즘 박살내기 - 19. DFS/BFS(Breadth-Frist Search)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. BFS (Breadth-First Search) 개념 BFS는 너비 우선 탐색이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘입니다. 대기업 코딩테스트에서 보통 주요하게 쓰이며, 최단 경로 구하는 문제에서 활용이 됩니다. 큐 자료구조를 사용하는 만큼, 각 언어마다 어떤 식으로 사용될 수 있는지 알아두는게 중요합니다. BFS는 큐 자료구조를 이용하며 구체적인 동작과정은 다음과 같습니다. 탐색 시작 노드를 큐에 삽입하고 방문 처리합니다. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리합니다. 더 이상 2번의 과정을 수행할 수 없을 때 …

April 28, 2022
algorithm
알고리즘 박살내기 - 18. DFS/BFS(Depth-First Search)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. DFS(Depth-First Search) 개념 DFS는 깊이 우선 탐색이라고 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 입니다. DFS는 스택 자료구조(혹은 재귀함수)를 이용하며, 구체적인 동작과정은 다음과 같습니다. 탐색 시작 노드를 스택에 삽입하고 방문을 처리합니다. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리합니다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼냅니다. 더이상 2번의 과정을 수행할 수 없을 때까지 반복합니다. DFS 동작 예시 스텝 0 : 그래프를 준비합니다. (방문 기준 : 번호 가 낮은 인접 노드 …

April 27, 2022
algorithm
알고리즘 박살내기 - 16-2 스택자료구조

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 자료구조 추가 학습 본 내용은 정리를 하던 도중 파이썬 내장 함수들 및 추가적으로 알아야 할 것들을 정리 할 겸, 쉴 겸 겸사겸사 작성해보는 포스트입니다. 위키 및 파이썬 공식문서들을 참조하여 정리한 내용입니다. 더불어 기본 개념은 16번 포스트를 참조 부탁드립니다 ㅎㅎ; 주된 참고 링크는 여기 입니다. 스택과 함께 사용되는 함수 : 아래의 개념들이 필요하다는 의미로 보시면 됩니다. : 스택이 비어있는지 여부를 판단합니다. 시간 복잡도 O(1) : 스택의 사이즈를 반환합니다. 시간 복잡도 O(1) : 스택의 가장 위의 요소의 참조를 반환합니다. 시간 복잡도 O(1) : ‘a’ 라는 요소를 삽입합니다. …

April 26, 2022
algorithm
알고리즘 박살내기 - 17. DFS/BFS(재귀함수)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 재귀함수 개요 재귀함수(Recursive Function)란 자기 자신을 다시 호출하는 함수를 의미합니다. DFS 구현 시 일반적으로 자주 사용하는 방법 중 하나이므로 이렇게 소개를 하고자 합니다. 재귀 함수의 종료 조건 재귀함수를 문젶 풀이에서 사용할 때는 재귀 함수의 종료 조건을 반드시 명시하도록 합니다. 이는 함수의 무한 호출을 야기하기 때문입니다. 팩토리얼 구현 예제 n! = 1 × 2 × 3 × … × (n - 1) × n 수학적으로 0! = 1! = 1 이 성립합니다. 최대 공약수 계산(유클리드 호제법)예제 유클리드 호제법 : 두 개의 자연수에 대한 최대 공약수를 구하는 대표적인 알고리즘 두 자연수…

April 26, 2022
algorithm
알고리즘 박살내기 - 16. DFS/BFS(스택과 큐 자료 구조)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 그래프 탐색 알고리즘: DFS/BFS을 위한 자료구조 개념 탐색(Search)이란 많은 양의 데이터 중 원하는 데이터를 찾는 과정을 말합니다. 대표적인 그래프 탐색 알고리즘으로 DFS, BFS 가 있습니다. DFS/BFS는 코딩테스트에서 매우 자주 등장하는 유형이므로 반드시 숙지할 필요가 있습니다. 위 내용을 알아보기 위해 스택과 큐 자료구조에 대해 먼저 알아볼 것입니다. 스택 자료구조 개념 선입된 자료가 나중에 나가는 형식 (선입후출)의 자료구조 입니다. 입구와 출구가 동일한 형태로 스택을 시각화 할 수 있습니다. 해당 자료구조는 다양한 곳에 쓰일 수 있습니다. 스택 자료 구조 동작 예시 해당 자료구조는 삽…

April 25, 2022
algorithm
Minitalk - 너도 할 수 있다 소켓통신

Prologue 진작에 끝난 과제… 사실 정리 하려면 빨리 했어야 하는데… 허허; push swap을 끝내고 나서야 이제야 보이는 정리 안된 모습에, 과제를 잊어 먹기전에 적어보려고 합니다. 해당 글이 과제 하시는데 아이디어를 얻는데 도움이 되길 기대하면서… Minitalk 와 소켓통신 기본 개념 미니톡이라는 과제는 기본적으로 ‘프로그램 간의 소통을 어떻게 해 내는가?’ 라는 부분에서 핵심적으로 이해해야할 것들, 그리고 통신이란 행위가 어떤 식인가를 이해하는 중요한 과제 입니다. 난이도도 쉽고, 이걸 굳이? 라고 할 수 있겠지만 우리가 사용하는 모든 것들이 통신을 통해 이루어지고 있다는 점을 감안한다면, 통신의 원리를 이해하고, 간단한 방법들은 직접 구현해 보는 것은 네트워크의 이해도를 높여준다고 생각합니다. 특별히 해당 과제는 약식의 구현이고, 그걸 위해 유닉스 시스템이 가진 ‘시그널’이란 도구를 활용한 다는 점에서 여러모로 유닉스 시스템에 대한 이해를 위한 행위라고 생각됩니다.…

April 23, 2022
42seoul
push swap 정복기(4) - push_swap의 함정...

Prologue 후… 모든 것을 마친 뒤의 만족감은 훌륭합니다. 별 일이 다 있었고, 아직 평가 전이긴 하지만 이 감정, 이 분노, 이 상황 그대로 정리하고자… 할 일은 좀 있지만, 글부터 적어 내려 가려고 합니다. 해당 내용이 다른 분들에게 얼마나 많은 도움이 될진 모르겠지만 우선, 어제 갑작스럽게 충격의 도가니에 빠졌다가 헤어나오는게 쉽지 않았습니다. Push Swap 사실 알고리즘에 대한 걱정은 생각보다 기우였습니다. 알고리즘 인강을 들으며 직접 기본기를 배우기 조금 먼저 시작했었고, 하나씩 정리하고 방식과 동작 원리를 이해하는 연습이 될 때마다 훨씬 폭 넓게 작동 기믹을 이해하기 시작했었고, 그 결실로 LIS 알고리즘으로 구현하는 방식을 해볼 수 있었고, 해당 방식은 상당히 인상적임과 동시에 내가 어떤 식으로 알고리즘을 이해하고 활용해야할 지에 대한 개괄적인 답변을 보여주었다고 생각합니다. 그렇기에 이 과제가 가진 매우 중요한 시사점. 학습을 계획하고 왜 굳이 이런 문제를 …

April 23, 2022
42seoul
알고리즘 박살내기 - 15. 구현 유형 문제풀이

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 시각 문제 설명 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하십시오. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각입니다. 00시 00분 03초 00시 13분 30초 반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안되는 시각입니다.. 00시 02분 55초 01시 27분 45초 문제 조건 난이도 : 하 풀이시간 : 15분 시간제한 : 2초 메모리 제한 : 128MB 입력 조건 : 첫째 줄에 정수 N이 입력됩니다. (0<= N <= 23) 출력 조건 : 00시…

April 21, 2022
algorithm
push swap 정복기(3) - LIS의 함정...두둥

Prologue 아.. 망했습니다. 사람은 역시 꼼꼼하게 읽어야 하는 것이었습니다. LIS 배열을 만드는 것에서 문제가 생겼습니다. 오늘 이 포스팅은 해당 내용에 대해서 스스로 반성 및 어떻게 할 지를 정리하는 글로써 남기려고 합니다. (그리곤 불타는 코딩 🫣) Push Swap LIS와 이분탐색의 한계 가장 큰 문제는 역시 제가 꼼꼼하게 읽지 않은 것이었습니다. 그 리고 동시에 LIS 성능을 극대화 하는 방법은 무엇인가에 대한 고민이 없었기에 만들어놓고 결국 문제가 있음을 깨달았고 이를 수정해보기 전에 단순 로직 구현으론 어떤 문제가 생기는지를 정리하였습니다. 1. LIS 배열의 극대화 우선 첫 번째 발견한 문제는 LIS 작성 중의 효율에 대한 문제였습니다. 예를 들어 이런 숫자의 배열이 들어왔다고 가정합니다. 이 배열에서 현재 상태 그대로 LIS를 구한다고 하면, LIS 값은 이렇게 지정되게 됩니다. 보시다시피 , , 을 현재의 스택 상태에서 구하게 되고 그렇게 될 경우 스…

April 20, 2022
42seoul
알고리즘 박살내기 - 14. 구현 유형 개요

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 구현: 시뮬레이션과 완전 탐색 구현(Implementation) 구현이란 머릿속에 알고리즘을 소스코드로 바꾸는 과정입니다. 알고리즘을 알면서 머릿속에서만 돌린다는 것은 당연히 자신의 실력의 성장에 한계를 만드는 거 아니겠습니까 ㅎㅎ.. 단, 코딩 테스트라는 상황에서 해당 부분을 본다면, 문제의 유형으로써 특징은 어느정도 숙지하고 있는게 중요합니다. 구현 ver.코테 풀이를 떠올리는 것은 쉽지만. 소스코드로 옮기기 어려운 문제를 지칭합니다. 구현 유형의 예시는 다음과 같습니다. 알고리즘은 간단한데 코드가 지나칠 만큼 길어질수 있는 문제 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정…

April 20, 2022
algorithm
알고리즘 박살내기 - 13. 그리디 알고리즘 유형

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 문제 : 1이 될 때까지 문제 설명 어떠한 수 N이 1이때될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 행하려고 합니다. 단, 두번째 연산은 N이 K로 나누어 떨어질때만 선택할 수 있습니다. N에서 1을 뺍니다. N을 K로 나눕니다. 예를 들어 N이 17, K가 4라고 가정합시다. 이때 1번의 과정을 한 번 수행하면 N은 16이 됩니다. 이후에 2번의 과정을 두 번 수행하면 N은 1이 됩니다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이 됩니다. 이는 N을 1로 만드는 최소 횟수입니다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로…

April 19, 2022
algorithm
알고리즘 박살내기 - 12. 그리디 알고리즘

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 그리디 알고리즘 개념 그리디 알고리즘(탐욕법)은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미합니다. 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구합니다. 그리디 해법은 그 정당성 분석이 중요합니다. 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는 지, 그 가능성을 검토합니다. 그리디 알고리즘 : 예시 문제 상황 문제상황 : 루트 노드부터 시작하여 거쳐 가는 노드 값의 합을 최대로 만들고 싶습니다. Q. 최적의 해는 무엇인가요? 단순히 현재 노드 위치에서 최대값을 찾아가면 합은 19가 됩니다. 실제 최대값인 ‘21’에는 미치지…

April 19, 2022
algorithm
알고리즘 박살내기 - 11. 파이썬 기초(자주 사용되는 표준 라이브러리)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 실전에서 유용한 표준 라이브러리 라이브러리들 내장 함수 : 기본 입출력 함수부터 정렬함수까지 기본적인 함수들을 제공합니다. 필수적인 기능들을 제공하고 있는 만큼 반드시 숙지하고 있어야 합니다. itertools : 반복되는 형태의 데이터를 처리하기 위한 기능들을 제공 합니다. (순열, 조합 라이브러리는 코딩테스트에서 자주 사용됩니다.) heapq : 힙 자료구조를 제공합니다. 일반적으론 우선순위 큐 기능을 구현하기 위해 사용됩니다. bisect : 이진탐색(Binary search) 기능을 제공합니다. Collections : 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함합니다. mat…

April 18, 2022
algorithm
알고리즘 박살내기 - 10. 파이썬 기초(함수와 람다표현식)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 함수 함수(Function)란 특정한 작업을 하나의 단위로 묶어 놓은 것을 의미합니다. 함수를 사용하면 불필요한 소스코드의 반복을 줄일 수 있습니다. 함수의 종류 내장 함수 : 파이썬 자체적으로 제공하는 함수입니다. 프로그램 전반에서 사용될만한 공통된 사용 도구들로 보시면 좋습니다. 사용자 정의 함수 : 개발자가 직접 정의한 역할을 수행하는 함수입니다. 개발 과정에서 필요시 되는 작업이 다양할 수 있는데, 그런 것들을 직접 만들어내는 경우를 의미 합니다. 함수 정의하기 프로그램에는 똑같은 코드를 여러 번 사용해야 할 때가 있는데, 그런 경우 함수화 시키면 소스 코드의 길이를 줄일수 있습니다. 매개변수(Para…

April 17, 2022
algorithm
push swap 정복기(2) - LIS 하위 배열을 만들어보자.

Prologue 우선은 중간 정리. LIS 알고리즘으로 하겠다고 결정을 하고, 내용을 이해하고 구현할 수 있는 곳까지 구현을 마무리 지어봤습니다. 핵심적인 알고리즘을 다 마무리 하고 싶었지만, 추가로 사용하기 위한 것들을 만들다 터지고…, 서순을 잘못 하거나 하는 등으로 노드를 잘못 연결시킨다던가 하는 일들 때문에… 어느새 하루를 다 쓰고, 부터 까지 만들고나니 12시가… 😅 이러나 저러나 코드가 나름 순조롭게 진행 중인 것 같아. 다행이라면 다행인? 상황입니다. 알고리즘이라고 잔뜩 쫄았지만, 생각보다 알고리즘 자체에 대한 이해가 어느 정도 되고, 레퍼런스가 될만한 것들을 구글링 하면서 찾아보면서 나름 순조롭게 된것 같아 다행입니다. 그리하야… CS 공부를 하기 전 해놓았던 것들을 정리하는 글을 써 놓으려고 합니다. Push Swap LIS 의 핵심은 여기에 있다고 생각했습니다. 다른 소팅 방식도 있지만, 다른 소팅의 경우 기준이 될만한 것을 만든다기 보단, 분할 -> 기준치를…

April 16, 2022
42seoul
알고리즘 박살내기 - 09. 파이썬 기초(반복문)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 반복문 개념 트정한 소스 코드를 반복적으로 실행하고자 할 때 사용합니다. 파이썬에서는 while 문과 for 문이 있고, 어느 쪽이든 사용에 큰 차이는 없지만, 실제 사용 예시를 보면 for 문 쪽을 활용하는 경우가 더 많습니다.(좀더 간편합니다) while문 예제 반복문에서의 무한루프 무한 루프(infinite loop)란 반복문의 조건이 무조건 ‘참’이 되어 루프를 벗어나지 못하는 경우를 말합니다. 코딩 테스트 문제 유형에서 이런 구현 유형이 거의 없습니다. 하지만 반복문을 쓰는 과정에서 종종 조건을 정확하게 짜지 않면 문제가 생길 수 있습니다. 따라서 항상 반복문을 작성 뒤 탈출 가능 여부는 확인해야 합…

April 16, 2022
algorithm
알고리즘 박살내기 - 08. 파이썬 기초(조건문)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 조건문 개념 프로그래밍 언어를 배우면서 진행하셨던 많은 분들이라면, 조건이라는 개념에 익숙하실 겁니다. 하지만 처음 시작하는 사람 입장에선 딱히 그렇지만도 않죠. 이에 대해 개념을 정리해보면 다음과 같습니다. “컴퓨터 과학에서 조건문(條件文, conditional)이란 프로그래머가 명시한 불린 자료형 조건이 참인지 거짓인지에 따라 달라지는 계산이나 상황을 수행하는 프로그래밍 언어의 특징이다. -위키백과” 조건문의 핵심은 행동을 결정하는데 있다고 생각합니다. 어떤 특정 데이터나, 데이터를 활용한 수식, 그 수식이 참(True)이나 거짓(False)이냐에 따라 다음 할 일을 결정지어주고, 그것들이 쌓이고 쌓이면 …

April 15, 2022
algorithm
알고리즘 박살내기 - 07. 파이썬 기초(기본 입출력)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 기본 입출력 개념 모든 프로그램은 적절한 입출력 양식을 갖고 있습니다. 특히나 코딩 테스트 등 요구사항이 있을 때 이를 어떤 식으로 출력하는가는 해당 요구 사항을 충족하나 안 하나를 결정 지을 수 있는 것입니다. 따라서 프로그램 동작의 첫 단계이자 마지막이 입출력이라고 보시면 됩니다. 자주 사용되는 표준 입력 방식 : 한줄의 문자열을 입력받는 함수 : 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용하는 함수 예시 ) 공백 기준으로 구분된 데이터를 입력 받을 때 예시 ) 공백 기준으로 구분된 데이터의 개수가 많지 않다면 단순히 다음과 같이 사용한다. 입력을 위한 전형적인 소스코드 빠르게 입력 받…

April 14, 2022
algorithm
push swap 정복기(1)

Prologue 올 것이 왔습니다. 사실 C 언어 강의를 마무리 짓고, So_long이나 Minitalk을 통한 소켓통신 구현 등… 이런 녀석들에 대해선 부담이란걸 느낀 적은 없었습니다. 멘탈이 바스라질 일은 있었지만(so_long… ^^) 그렇다고 못할 수준이냐? 지금 생각하면 그렇진 않았습니다. 하지만 알고리즘은 확실히 부담이 느껴집니다. 이유는 수학을 손 놓은지 어언 몇 년째이고, 정리 정돈이라니…! 내가 제일 못 하는 부분 중에 하나를 들이밀다니. 😳 해본적 없는 걸 해보게 된다는 것 만큼 가슴 두근거리는(부정적으로) 일은 없을 것 같습니다. 그럼에도 인강도 듣고, 결국 해쳐서 해결해 나갈 것을 알기에… 제대로 빡세게 공부해보려고 합니다. 이왕 하는김에! 보너스까지!(이래놓고 so_long은 보너스 안 했지만(…)) 우선, 가이드로 제공되는 문서들을 찬찬히 훑어보먼서 핵심들 위주로 정리해보고자 합니다. 그 뒤에 실제 부분부분 구현부터 시작해서 진행해보겠습니다. Push Sw…

April 13, 2022
42seoul
알고리즘 박살내기 - 06. 파이썬 기초(사전, 집합 자료형)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 사전 자료형 개념 사전 자료형은 키와 값의 쌍으로 이루어진 자료형입니다. 앞서 다룬 자료형인 리스트나 튜플이 값을 순차적으로 저장하고, 인덱싱을 하는것 과는 대비됩니다. 사전 자료형은 키와 값의 쌍으로 데이터를 가지면서, 원하는 ‘변경 불가능한(Immutable) 자료형’을 키로 사용 가능합니다. 사전 자료형은 해시 테이블을 이용하므로 데이터 조회 및 수정에 있어서 O(1) 의 시간 처리를 할 수 있습니다. 자료의 사용에 있어서 상당히 빠른 타이밍으로 확인이 가능합니다. 표로 표현하면 아래의 형태를 구현 한다고 보시면 됩니다. key value 사과 Apple 바나나 Banana 코코넛 Coconut 사용 방…

April 13, 2022
algorithm
알고리즘 박살내기 - 05. 파이썬 기초(문자열, 튜플)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 문자열 자료형 문자열 자료형의 개요 Python 은 문자열을 사용하는 부분에서 다른 프로그램 언어로 사용하는 것과 다르게 굉장히 강력한 기능들을 갖고 있습니다. 문자열 변수의 초기화 : 다른 프로그램 언어 중 큰 따옴표("")와 작은 따옴표(”) 를 구분하여 의미를 부여하는 경우가 있으나, Python은 큰 구분이 없습니다. 단, 문자열 안에 다른 따옴표를 넣는 부분에선 사용에 구분이 필요합니다. 전체 문자열을 감싸는 따옴표가 큰 따옴표이면 작은 따옴표를 사용해야 하며, 그 반대는 동일하게 반대로 생각하면 됩니다. 혹은 백슬래쉬(\)를 사용하면 됩니다.(이러한 부분은 다른 프로그램 언어와 유사합니다.) 문자열…

April 11, 2022
algorithm
알고리즘 박살내기 - 04. 파이썬 기초(리스트 자료형)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 리스트 자료형 리스트 자료형의 개념 여러개의 연속적 데이터 처리용인 자료형 입니다. C나 자바의 배열(Array)의 기능및 연결리스트와 유사한 기능을 지원합니다. C++ 의 STL vector 와 기능적으로 유사합니다. 리스트 대신 배열 혹은 테이블 이라고도 합니다. 형태에 따라 단일 차원~ 다차원 리스트가 존재할 수 있습니다. 리스트 초기화 리스트의 인덱싱과 슬라이싱(Indexing and Slicing) 인덱스 값을 입력하여 리스트의 특정 원소 접근하는 것을 인덱싱(Indexing)이라고 합니다. 파이썬에선 인덱스의 값은 양, 음 모두 사용할 수 있다는 점이 매우 특이한 부분입니다. 음의 정수를 넣으면 0…

April 11, 2022
algorithm
알고리즘 박살내기 - 03. 파이썬 기초(수 자료형)

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 자료형 모든 프로그래밍 언어는 결국 데이터를 다루는 행위입니다. ⇒ 따라서 들어오는 자료를 어떻게 처리하는지를 이해하는 것은 프로그래밍의 첫 걸음이라 할 수 있습니다. Python 의 자료형 : 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등 ⇒ 저수준의 언어들과 비교하면 매우 다양한 기능 지원하며 자료형 마다의 특징을 이해함은 코딩시 매우 편리합니다. 정수형 정수형(integer)은 정수를 다루는 자료형입니다. (양의 정수, 0, 음의 정수 포함) 코딩 테스트의 많은 유형이 정수 자료형을 다룹니다. 기본적으로 대부분의 프로그램과 수치는 실수보단 정수형으로 사용합니다. 실수형 실수형은 소수점 아…

April 11, 2022
algorithm
알고리즘 박살내기 - 02. 알고리즘 성능 평가

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 복잡도 복잡도의 개념 복잡도는 알고리즘의 을 나타내는 척도입니다. 우리는 쉽게 눈에 보이는 코드의 복잡도로 코드를 판가름 할 수 있지만, 사실 컴퓨터 시스템에서의 복잡도라는 것은 사람과는 다르게 작동하고, 자원을 효율적으로 사용해야하는 필연적인 상황 상 컴퓨터의 복잡도를 알고 접근하냐 모르냐는 매우 중요한 부분이라 할 수 있습니다. 시간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘 수행 시간을 분석합니다. 공간 복잡도 : 특정 크기의 입력에 대해 알고리즘 메모리 사용량을 분석합니다. 동일한 기능을 수행하는 알고리즘이 있다면, 일반적으로 복잡도가 낮을 수록 좋은 알고리즘이라고 보시면 됩니다. 빅오 표기법(B…

April 11, 2022
algorithm
알고리즘 박살내기 - 01. 코딩테스트란 무엇인가?

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 코딩테스트란 무엇인가? 코딩 테스트란? 기업, 기관에서 직원이나 연수생을 선발하기 위한 목적으로 시행되는 시험입니다. 공채를 하는 기업에서 코딩을 주로 이용합니다. 문제 해결 역량을 평가하며 채점 시스템을 통해 응시자 수를 줄이는 효과를 갖고 있습니다. 코딩 테스트의 유형 온라인 코딩 테스트 인터넷을 활용해 프로그래밍 역량을 평가하여 응시자를 선별하는 방식입니다. 대체로 타인과 문제풀이를 공유하지 않는 선에서 인터넷 검색을 허용합니다. 오프라인 코딩테스트 시험장에 방문하여 치르는 시험입니다. 대체로 인터넷 검색이 허용 되지 않고, 회사에서 제공하는 환경에서 진행됩니다. 온라인 저지란? 체력을 키우기 좋은 훈련…

April 11, 2022
algorithm
알고리즘 박살내기 - 00. INDEX

Introduction 본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다. 🧑🏻‍💻 알고리즘 박살내기 시리즈🧑🏻‍💻 00. INDEX 01. 코딩테스트란 무엇인가 02. 알고리즘 성능평가 03. 파이썬 기초(수 자료형) 04. 파이썬 기초(리스트 자료형) 05. 파이썬 기초(문자열, 튜플형) 06. 파이썬 기초(사전, 집합형) 07. 파이썬 기초(기본 입출력) 08. 파이썬 기초(조건문) 09. 파이썬 기초(반복문) 10. 파이썬 기초(함수와 람다 표현식) 11. 파이썬 기초(자주 사용되는 표준 라이브러리) 12. 그리디 알고리즘 개요 13. 그리디 알고리즘 유형 문제 풀이 14. 구현 유형 개요 15. 구현 유형 문제 풀이 16. DFS/BFS(스택과 큐 자료구조) 16-1. DFS/BFS(…

April 11, 2022
algorithm
Electron을 알아보자

프롤로그 어제의 6회 평가를 마무리 짓고, 미친듯이 무거운 몸과 마음. 왠지 하고 싶지 않은 미니톡 과제… 딴짓을 하고 싶지만 하다못해 유용한 딴짓을 해보고 싶어(ㅋㅋ) 이렇게 자료로 남겨둘 것들을 정리해보고자 합니다. 처음 이걸 알게된 것은 우연치 않게 노마드 코더 유튜브 였습니다. 처음엔 별 생각이 없었는데… 정말 충격과 공포가 아닐 수 없는 프레임워크. 이걸 보는 순간 이게 필요하단 생각을 아니 할 수 없었습니다…! 크롬 엔진을 바닥에서 돌게 만들고, JS와 웹을 위한 도구들을 활용하여 브라우저에서 사용하는 웹앱을 시스템과 연결시켜주는 활용성… 이건 현재의 웹 기반의 모든 서비스들을 위해 정말 필수적인 요소라는 확신을 가질 수 밖에 없는 기술이었습니다. 모바일 시장을 위해, 또 모바일에서 이어서 태블릿이나 PC 시장까지도 생각해볼만한 툴이라니, 이건 활용하는 방법만 잘 고려한다면 정말 획기적으로 개발 코스트를 줄이면서도 서비스로써 구색을 갖춘 무언가를 만들 수 있어 보였습니다…

April 03, 2022
etc
So_Long을 마치면서

So_Long 해당 과제에 대해 정리는 저장 목적도 있지만, 동시에 다음 번 과제를 고려하여 이렇게 준비하게 되었습니다. 앞으로 해야하는 과제들을 위한 정리적 차원의 글이라고 보시면 좋을 것 같습니다. 🙂 So_Long 이건 무슨 과제였던가? 게임을 만든 다는 것을 실질적으로 체험해 본다는 것은 대단히 흥미로운 경험입니다. 하물며 요즘은 엔진이나, 게임위한 툴이 존재하는데, 그런 편리함을 모두 없애버리고 순수하게 데이터를 만져서 무언가를 표현한다는 것은 그만큼 쉽지 않아 보입니다. 얻은 것, 그리고 얻어야 할 것 그렇기에 과제에 대해 저는 상당한 흥미를 갖고 있었습니다. 비전공자로써 무언가를 만든다는 것에 대한 흥미를 갖고 있었음에도, 아직까지 해본건 그저 함수를 만들어 본 것 정도의 일이었기에 So_Long 이라는 프로그램을 만든다는 것은 확실히 ‘프로그램 다운 프로그램’을 만든다는 점에서 대단히, 대단히 괜찮은 것이 아닐까 하는 생각을 갖고 있었습니다. 그래서 So_long …

April 03, 2022
42seoul
42에서의 첫 팀 스터디를 마치면서...

스터디를 마치면서 적어보는 나름의 소해… 42 서울 첫 깃 페이지 스터디를 마치면서 42서울의 핵심은 동료 라고 생각합니다. 사실 이 밖에도 여러 말로 형용할 수는 있을 겁니다. 하지만 저는 이 말이야 말로 가장 필요하고, 42서울이라는 공간의 잠재능력의 근본이라고 생각하게 되었습니다. 라피신, 수영장 42서울 첫 발을 디딤과 동시에 우리는 라피신이란 벽을 만나게 됩니다. 물밀듯 밀려들어오는 과제의 연속, 전혀 모르는 개념이지만 전혀 설명해주지 않는데, 심지어 교재도, 정해진 방식도 없습니다. 주변에서는 잘 하는 사람이라면 어느새 마무리하고 멋지기까지 한 과제를 보고 있노라면 멈춰 서있는 것 같은 내 자신의 모습을, 목까지 차오른 물로 질식할 것만 같은, 성인 풀장에 들어간 어린아이와 같은 감각까지도 느끼게 됩니다. 그런 상황에서 갑작스런 일이지만, 동시에 조금 힘이 풀리게 됩니다. 정확히는 자기자신에게 실망을 하고, 동시에 머릿속이 새 하얗게 되버립니다. 내 부족을 인지하게 되고…

March 24, 2022
etc
깃 블로그 활용을 위한 자동 deploy 스크립트

P.s ) 개인적인 일기글에 가까운 글은 아무리 생각해도 전달하는 용의 글이 아닌 만큼 편안하게 글을 쓸 것입니다. 글체가 바뀌었다고 당황하지 말아주세요…😅 깃블로그 스터디 큰 고비를 넘겼다. 해야할 일들을 마무리 지었고, 특히나 소득이 컸던 것은 기술블로그 구글 애널리틱스 적용 및 자동화 스크립트 작성 부분이었다. 개발 공부를 한지 어언 몇 달 째, 드디어 갑작스럽게 블로그 공부를 하던 도중 알게된 ‘불편함’에 직접 자동화 스크립트를 짜보자 하고 생각하여 부랴부랴, 놀던 와중에 스크립트 명령어들을 뒤지기 시작했다. 역시 구글의 힘일까. 필요한 명령어를 찾아다녀봤는데, 생각보다 간단하게 끝날 수 있는 부분이었다는 것에 이 편한걸 왜 안했을까 싶다는 생각도 들었다. 해당 스크립트의 핵심은 현재 상태 파악 및 깃 커밋 후 를 자동으로 실행해 주는 것이다. 활용된 명령어를 정리하면 아래와 같다. : 전형적인 출력용 명령어(printf 도 동일한 용도. 걍 쓰다보니 중간에 써보며 테스트…

March 20, 2022
etc
Markdown 사용을 위한 메뉴얼

해당 글은 이분의 글을 참고로 작성되었음을 알려드립니다. Markdown 사용을 위한 메뉴얼 사용화 시키기 위하여 저장해둔 글입니다. [공통] 마크다운 markdown 작성법 1. 마크다운에 관하여 1.1. 마크다운이란? Markdown은 텍스트 기반의 마크업언어로 2004년 존그루버에 의해 만들어졌으며 쉽게 쓰고 읽을 수 있으며 HTML로 변환이 가능하다. 특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 컨텐츠를 작성하고 보다 직관적으로 인식할 수 있다. 마크다운이 최근 각광받기 시작한 이유는 깃헙(https://github.com) 덕분이다. 깃헙의 저장소Repository에 관한 정보를 기록하는 README.md는 깃헙을 사용하는 사람이라면 누구나 가장 먼저 접하게 되는 마크다운 문서였다. 마크다운을 통해서 설치방법, 소스코드 설명, 이슈 등을 간단하게 기록하고 가독성을 높일 수 있다는 강점이 부각되면서 점점 여러 곳으로 퍼져가게 된다. 1.…

March 18, 2022
42seoul
study
42서울 exam rank 02 후기

RANK_02 Study 스터디 해야하 할 로직들을 빠르게 정리한 것입니다. 구체적으로 어떤 문제인지는 과제를 잘 해결해오신 분들에게는 너무나 쉬운 내용일 것입니다. 해당 내용은 바뀔 수 있으며, 도용을 방지하고자 구체적인 코드는 작성하여 올리지 않을 것입니다. 핵심 내용 서클 과제들을 클리어하고 그 로직과 원리를 이해해둘 것. vim 을 활용하는 만큼, vim 핵심 기능 몇 가지는 숙지해둘 것 준비물 A4 펜 시험 과정 해당 내용은 개선되었을 여지가 있어 차후 작성 예정입니다. 로직 정리 printf 핵심 %c, %s, %x 를 printf 와 같이 출력해 낼 수 있는가? 알아야 하는 주요 개념 허용함수 : write, malloc, free 필요헤더 : , 가변인자 : 인자들을 가변적으로 받을 수 있는 자료형 필요 헤더 : 핵심사항 : 변수 선언 -> ({변수명}, s) -> ({변수명}, {자료타입}) 으로 해당 변수…

March 18, 2022
42seoul
MinilibX_08_Sync(완료)

Sync What is sync? 이전에 설명한 것처럼, 직접 mlx 를 가지고 프레임을 직접 관리할수 있습니다. 하지만 이는 꽤나 끔직하며 시간 소비적인 일입니다. 게다가 더 많은 메모리를 먹고, 우리가 관리하는 프레임은 지속적으로 완전히 갱신되어야 할 필요가 있죠. 이는 매우 비효율적이고 더 나아가선 모든 코스트를 제외할 필요를 야기할 수 있습니다. 2020년의 MLX 버전 부터는 프레임을 synchronize 시키는 것이 가능해졌습니다. 이는 임시 방편으로 다수의 이미지를 스크린 버퍼링을 위해 만들 필요가 사라졌다는 것을 의미합니다. Using sync 우선 이해해야 하는 걸 먼저 정의하고 시작하겠습니다. 함수는 정의된 커맨드 코드들로 호출될 수 있습니다. 첫번째로 은 이미지에 대한 모든 다음 호출을 버퍼해줍니다. ( 은 MLX image object 의 포인터입니다.) 만약 변화를 증식시키길 원한다면, 당신은 이미지가 표시되는 중인 창을 를 활용하고, 에대해 flus…

March 14, 2022
42seoul
MinilibX_07_Images(완료)

Images Introduction mlx 상에서 완벽한 잠재력 끌어 내기 위해 중요한 도구 중 하입니다. 이 함수들은 당신이 이미지 객체로부터 파일을 직접 읽는 것을 허락해주고, 포인터로 접근하는 것을 가능케 합니다. 이는 텍스쳐나 스프라이트 등을 호출하여 윈도우에 호출해주는 역할을 하며, 이를통해 게임의 캐릭터, 게임 요를 만들어냅니다. Reading images 파일부터 이미지 객체까지 읽어 들이기 위하여, 우리는 XMP 혹은 PNG 포맷을 필요로 합니다. XPM 파일의 경우 온라인 상의 변환 웹 페이지를 활용하시면, PNG 파일을 사용하여 쉽게 제작이 가능하며, 추천하는 이미지 포맷입니다. 이미지 파일들을 읽기 위해, 우리는 와 라는 함수 호출이 필요합니다. 주의사항은 는 현재 메모리 누수가 존재 한다는 점입니다. 두 함수들은 모두 동일한 인자들과 동일한 사용성을 제공한다는 점을 알아 주십시오. 더불어, 현재 알려진 바, mlx 라이브러리 mms 버전은 렌더링 과정에서의…

March 14, 2022
42seoul
MinilibX_06_Loops(완료)

Loops Introduction 이제 우리는 MiniLibX Library의 기초를 이해했습니다. 그러니 창 안에 작은 애니메이션을 그려보는걸 시작합시다. 이걸 위해 우리는 새로운 함수 , 이라는 새로운 두 함수를 사용해야 합니다. 반복문은 새로운 프레임들을 렌더링하기 위해 으로 등록된 hook을 호출 이어나가는 MiniLibX의 기능 중 하나입니다. Hooking into loops 반복문을 초기화 하기 위해, 함수를 인스턴스를 가지고 호출을 합니다. 우리가 따로 등록한 loop hook가 없으로 아무것도 안 일어날 겁니다. 그러므로 현재 상태로는 프레임과 관련된 기능들을 사용하는 것이 쉽지 않습니다. 따라서 우리는 getting started 챕터에서 묘사했던 변화를 사용하고, 새로운 창을 만들어야 할 것입니다. 당신의 인자들을 잘 전달한다 할 수 있고, 능숙하다는 전재하에 진행함을 참조하여 주세요. 현재 무엇이든 그릴 수 있는 화이트보드는 이런 모습으로 표현 될 수…

March 14, 2022
42seoul
MinilibX_05_Events(완료)

Events Introduction 이벤트들은 mlx 안에서 대화식 어플리케이션의 근간이라고 볼 수 있습니다. 그러므로 차후의 그래픽 프로젝트에서도 사용될 것이므로 이 챕터를 완벽하게 이해하는 것은 필수라고 할 수 있습니다. 모든 mlx 의 hook 들은 이벤트가 발생할 때마다 호출되어지는 함수 그 이상도 그 이하도 아닙니다. 모든 이벤트 함수들을 완벽하게 숙지하는 것은 필수는 아니지만, 각 X11 이벤트들에 따라서 빠르게 검토해보고 정확하게 용도를 파악해두는 것은 향후를 위해 매우 중요한 부분입니다. MacOS version 주) Mac OS 에서 Cocoa(Appkit) 그리고 OpenGL 버전은 부분적으로 X11 이벤트를 지원하지만, 는 지원하지 않는다(mlx의 x_mask 인자는 쓸모가 없으므로 0으로 두시면 됩니다.). 지원 이벤트들 : X11 interface X11 은 mlx와 함께 사용되는 라이브러리 입니다. X11 events 다양한 이벤트 들이 존재합니다. Key…

March 14, 2022
42seoul
MinilibX_04_Hooks(완료)

Hooks 컴퓨터 프로그래밍에서 hooking 이란 용어가 있습니다. 이는 SW 컴포넌트 사이에서 지나가는 메시지, 혹은 이벤트들, 혹은 함수 호출을 가로채서 다른 SW 컴포넌트의, 혹은 어플리케이션의, 운영체제의 행동, 인자를 대체하는데 사용하는 기술을 아우르는 말입니다. 그러한 함수 콜, 이벤트들, 메시지를 가로채는 걸 다루는 code 들을 이라고 부릅니다. Introduction Hooking은 디버깅이라던지, 함수의 확장 등을 포함하여 다양한 목적으로 사용됩니다. 예시로서는 키보드를 가로채거나, 어플리케이션에 도달하기 이전에 마우스 이벤트 메시지를 취한다거나, 특정 어플리케이션이나 다른 컴포넌트의 함수 수정 혹은 감시하는 행위를 위해 운영체제의 호출을 가로채는 등을 들 수 있습니다. 이는 벤치마킹 프로그램등에서도 널리 쓰이며, 3D 게임의 프레임레이트를 측정하는 용과 같이 생각보다 여기저기서 사용되는 보편적인 개념입니다. Hooking into key events hook…

March 14, 2022
42seoul
MinilibX_03_colors(완료)

들어가기 앞서 해당 내용은 참고 정도로 생각하면 좋습니다. 픽셀을 직접 그리는 과제를 제외하곤 사용성이 크게 있진 않은 개념입니다. Colors 색은 정수 형태로 표현됩니다. 그러므로 몇 가지 ARGB 값을 포함할 수 있는 정수를 획득할 수 있도록 기믹적인 것들을 필요로 합니다. The color integer standard 문자 뜻 T 투명도 R 붉은색 컴포넌트 G 초록색 컴포넌트 B 파란색 컴포넌트 RGB 색은 다음처럼 초기화 될 수 있다. 색 TRGB 표시 red 0x00FF0000 green 0x0000FF00 blue 0x000000FF Encoding and decoding colors 색을 encode, decode 하는 방법으로 두가지를 사용할 수 있습니다. 비트 연산을 활용하는 방법과, int, char 값으로 변환하는 방법입니다. char/int conversion 1 바이트 당 RGB 값이 지정되고, 당연히 16진수의 정수값으로 지정한 것을 반대로 설정하는 것…

March 14, 2022
42seoul
MinilibX_02_Getting Started(완료)

Getting started 들어가면서 첫 파트에 앞서 간단한 개념 정리를 통해 MiniLibX가 무엇을 하는지를 알았습니다. 이번 파트는 그에 이어서 기초적인 것을 진행할 것입니다. 이 라이브러리를 사용하여 성능적으로 좋은 코드를 어떻게 작성하는지에 대한 정보들을 제공할 것이며, 이러한 내용은 다양한 프로젝트를 위해(앞으로 자주 쓰게 되는 만큼), 퍼포먼스는 핵심입니다. 이 섹션은 분명하게 정독 하시기를 추천 드립니다. 설치 절차 맥에서 컴파일 하기(x86-64, intel Based) MiniLibX는 맥 OS의 Cocoa(Appkit) 와 OpenGL(더이상 X11을 사용하지 않는다) 필요로 하기 때문에, 우리는 두 가지 사항을 링킹할 필요가 있습니다. 이는 복잡한 컴파일 과정일 수 있습니다. 기본적인 컴파일 절차는 다음과 같습니다. 목적파일을 위해, 당신의 프로젝트 루트 단에 로 지정된 디렉토리 안에 mlx 소스코드가 있다는 전제 하에 다음 규칙을 당신의 Makefile에 …

March 14, 2022
42seoul
MinilibX_라이브러리 가이드 문서 번역(완료)

Prologue 해당 문서는 42 so_long 등에 사용하는 그래픽 라이브러리에 대한 내용을 정리한 해당 본문 을 통번역 한 문서입니다. 최대한 정확하게 정리하고자 하였으나, 다소 차이가 있을 수 있으므로 참고 바랍니다. 더불어 내용에서 다소 부정확해 보이는 표현은 의역 및 수정한 부분이 있으므로 유의하십시오. MiniLibX Introduction 들어가면서 MiniLibx는 간단한 그래픽 라이브러리로 X-window 그리고 Cocoa에 대한 지식 없이도 스크린 상에 무언가를 렌더링 하는 가장 기초적인 일을 할 수 있는 라이브러리입니다. 지원하는 기능들에는 simple window creation, questionable drawing tool(의심스러운 그리기 도구란 의미다… 왜 이렇게 적었는지는… 그만 알아보자), half-ass image functions and a weird event를 갖고 있다(a에서 ss로 끝나는 단어가 있는 걸 봐선 욕먹는다고 보면 됩니다.) X…

March 14, 2022
42seoul
여는 글

드디어 써보는 첫 블로그 글… 블로그를 쓴 다는 것은 예전부터 했던 일이고, 작년 연말 42서울을 들어오고, 개발자를 해보기로 마음 먹었을 때부터 준비했던 일이었습니다. 하지만 익히 알듯이 이런걸 꾸준하게 해낸다는 것은 쉽지 않습니다. 왜냐하면, 우선 꾸준한 시간의 할애가 필요할 뿐만 아니라 생활 패턴에서 학습과 더불어 병행한다는 것은 상당한 자기 시간을 필요로 하기 때문이죠… 거기다 언제나 그럴싸한 계획은 있지만, 항상 실수란 존재합니다. 계획과는 다르게 기술 블로그 구현은 난항을 겪었고, 부족한 기초 코딩 실력과 컴퓨팅 능력은 예상보다 꽤나 긴 딜레이를 초래했죠. 이런 점에서 계획되로 뭔가를 한다는 것이 얼마나 어려운지 새삼 느낄 수 있는 부분이 아닐까 생각해봅니다. 그러나 시간은 흘러 드디어… 그럼에도 42에서의 저의 코딩과, 고민의 시간은 결실을 만들어 갔습니다. 참 웃긴 것은 자신감 없던 기본기가, 조금씩 조금씩 꾸역꾸역 내가 할 수 있는 것에 재미를 느끼고 고민하던 시간…

March 12, 2022
etc
template

제목 소제목 본문 제목 소제목

January 01, 2000
etc