본문 바로가기

전체 글231

[개발일지] 프로젝트 X 중간평가 및 후기 개요4학년 과목으로 수강 중인 프로젝트 X 중간평가 후기다.플젝X는 학생들이 모여 원하는 프로젝트를 만드는 것이고, 이에 대해 학교의 빵빵한 지원을 받을 수 있다.  우리학교에 koala라는 알고리즘 학회가 있는데, 운영진들은 매번 카톡/노션을 활용해서 스터디원들을 관리한다.이를 웹사이트로 만들어보자는 운영진이 있었고, 운좋게 참여하게 되었다~!   크게 내가 지금까지 한 건 다음과 같다.ERD 개념적 스키마 설계 참여보안성, 가용성을 고려한 AWS 세팅Jenkins + Docker 조합으로 CI/CD POC 진행EB + Github actions CI/CD개발 서버 운영 - shell script 정의도메인 구매 및 세팅작업 문서화팀프로젝트에 대한 운영1. ERD 개념적 스키마 설계 참여처음 프로젝트 .. 2024. 5. 1.
[개발일지] API의 멱등성을 고려하여 개발하기 개요내가 개발한 기능을 쓰는 사람이 Admin 관리자였는데, 개발 과정/구현 내용을 모르다보니 이걸 쓰다가 문제가 생겼다. 이 문제의 핵심은 API의 멱등성을 고려하지 않아서 발생한 것또한, 사용자 관점에서 테스트를 진행해야 한다는 깨달음을 얻었다. API 멱등성이라는 것에 대해 전혀 몰랐고,, 코드 리뷰를 통해 알게 되었다. 따라서 이 포스팅에서는 API의 멱등성에 대해 다루어 앞으로 의식하고 적용할 수 있도록 해볼 것이다! 멱등성(Idempotency)생소한 용어 먼저 살펴보자. 멱등성은 보통 수학에서 자주 사용하는 용어로, 여러 번 연산을 적용하더라도 결과는 달라지지 않는 성질을 말한다. 한자어도 덮을 멱, 무리 등인데 무리(swarm)의 효과를 덮어버린다! 이런 뜻을 담고있다.  HTTP의 멱등성.. 2024. 4. 26.
[네트워크] Transport Layer, Mux & Demux 개요TCP Keywordsreliable data transferflow controlcongestion controlTransport Layer가 하는 일서로 다른 host의 프로세스 간 Logical communication 제공프로토콜은 End System 즉, host에서 돌아간다.Network 계층의 라우터들을 거쳐서 데이터들이 전달되지만, Transport 계층은 이 거쳐가는 과정은 보이지 않고 두 엔드 시스템(프로세스) 사이의 Logical Communication에만 집중한다.Sender: App Layer의 메시지를 segment 단위로 메시지를 잘라서, Transport Layer의 헤더를 붙이고 Network Layer로 전송Receiver: 받은 segme.. 2024. 4. 24.
[네트워크] DNS, DNS 쿼리, DNS recode 종류 개요프로세스가 서로 통신할 때 알아야 하는 두 가지 정보 → IP, PortIP: 프로세스가 돌고 있는 머신의 Network Interface Card에 부여된 Identity → IPv4, host name(domain name)Port: 실행 중인 프로세스에 접근할 수 있는DNSIP 주소를 hostname으로 매핑(라우팅)해주는 역할→ Network Layer에서 해야하는 일을 App-Layer에서 함⇒ Network Layer는 빠르게 전송만 하면 돼서, 복잡한 연산을 App-Layer에서 처리하는 것distributed database → not centralize가용성, 중요한 서비스는 분산시킨다.application layer protocol   DNS가 하는 일host name-IP addr.. 2024. 4. 24.
[네트워크] HTTP 개요HTTP는 Hyper Text를 전달하는 프로토콜이다.request, response 두 가지 타입이 있다. Hyper Text?파일들이 링크되어 있는 텍스트HTTP 특징ConnectionlessHTTP는 클라이언트의 요청에 대한 응답을 하면, 바로 연결을 끊는다. 한 클라이언트에 대한 접속 유지 시간을 줄임으로써 더 많은 요청-응답을 할 수 있다.(단점) 같은 클라이언트 요청이 오더라도 이에 대해 전혀 알 수 없다. → 이걸 해결하기 위한게 쿠키 Stateless바로 직전의 클라이언트에서 또 요청이 왔을지라도, 해당 클라이언트의 상태를 저장하지 않으므로 클라이언트 측에서 추가적인 정보를 제공해야 한다. HTTP는 Transport 계층에서 TCP를 사용한다.Reque.. 2024. 4. 24.
[네트워크] TCP/IP 5계층 | Application Layer TCP/IP 5계층ApplicationFTP, HTTP, SMTP 등의 프로토콜TransportTCP, UCPNetworkIP, 스위치Link이더넷Physical 여기서 7계층되면…Application - Transport 계층 사이에 두 계층 추가Presentation 인코딩, 디코딩, 암호화/복호화Session: 애플리케이션 간 연결 지원(SSL, TLS 등)계층 간 이동 ⇒ Encapsulation각각의 계층을 이동하면서 프로토콜 헤더를 붙이게 된다.캡슐화: 송신 측에서 응용계층부터 각 계층을 들리면서 헤더 추가, 물리 계층까지 가면 최종적으로 전기 신호로 변환되어 수신 측에 도착  Applciation Architectur.. 2024. 4. 24.
[Algorithm] 이중 포문 조정 - 구간합 개요 시간복잡도 줄이는 법을 학습하면서 해본 정리 코드트리를 참고하였다! 어떤 배열에서 특정 합을 만족하며 가장 크기가 큰 구간의 크기를 찾기 위해 완전탐색을 하면 다음과 같다. 완전탐색 - O(N**3) # 이 배열에서 특정 구간을 골라서, # 합이 10이 넘지 않아야 하고, # 배열의 크기가 가장 커야 한다. 이때의 배열 크기는? arr = [0,6,3,2,4,9,1] n = len(arr) target=10 # 무식하게 구해보기 for i in range(1, n+1): for j in range(i, n+1): total = 0 for k in range(i, j+1): total += arr[k] if total target : break ans = max(ans, j-i+1) *이 경우, j는.. 2024. 4. 17.
[DB] DB스튜디오 과제 리뷰 2 | 데이터 모델링과 개념적 설계 개요 지난 1편에 이어서, 이번 과제도 배울 점이 많아 리뷰를 작성한다. 요구사항 1 지금까지 과제에서는 DATABASE 설계 명목 하에 개체와 속성이 뚜렷하게 보이는 식으로 요구사항이 정의되었다. 그런데 원래 요구사항은 대화하는 방식으로 주어진다. 이번 과제부터 자연어 요구사항이 주어졌고.. 이러한 경우는 "모호성 제거" 단계를 거쳐야 한다. 내 설계는 위와 같은데, 피드백을 받으면서 느낀 점은 다음과 같다. 요구사항이 빠졌는지에 대해 면밀히 검토하는 것은 좋다. 그런데 개체 간의 단순한 관계의 의미를 넘어서 응용 관점을 검토해보는 태도가 필요하다. 그러니까 위 설계같은 경우는 Customer와 Book 사이에 order라는 관계는 의미상으로는 완벽하다. 하지만 다음 질문에 답하기 어려운 설계다. Cu.. 2024. 4. 17.
[AWS] public & private subnet 분리로 서버 운영하기 개요 AWS 서비스를 조금 더 보안성 있게 운영하고자 한다면, 한 VPC 내의 subnet을 분리하여 사용하는 방법이 있다. 이번 프로젝트는 앞으로 동아리에서 쭉 사용할 서비스이므로 처음부터 보안에 유의하여 설계를 해야겠다 다짐했다!! 그래서 이 포스팅을 통해 어떤 과정을 겪었는지 정리해보려 한다. AWS에서 자체적으로 해주는 것이 많아서 생각보다 많이 간단했다. VPC 만들기 AWS 계정을 생성하고 나면 기본 VPC는 존재한다. 별도의 퍼스널 서브넷 세팅을 위해 새로 VPC를 생성하자. 생성할 리소스 옵션 중 VPC만/VPC 등 두 가지가 있는데, private subnet에 RDS를 두려면 반드시 후자를 선택해야 한다. RDS 생성 시에도 RDS subnet을 세팅하게 되는데 이때 subnet은 두 .. 2024. 4. 7.
[백준/1063] 킹 | 구현 실수 방지를 위한 경우의 수 체크하기 킹 1063번: 킹 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 www.acmicpc.net 알고리즘 킹이 움직인다. 이때 체크해야할 조건은 다음과 같다. 격자 안에서만 움직여야 한다. 돌이 있는 곳으로 움직일 경우, 돌과 함께 움직여야 한다. 이때 돌 또한 격자 안에서 움직여야 한다. 돌이 격자 밖으로 나가는 경우도 체크하되, 이때 킹이 격자 내에서 움직인다면 상관없이 움직인다 이를 코드로 나타내면 다음과 같다. # 격자 내에서 해결해야한다. if (0 2024. 3. 31.
[DB] DB스튜디오 과제 리뷰 | 데이터 모델링과 개념적 설계 개요 DB 스튜디오 과목에서 매주 요구사항에 맞게 데이터 모델링을 하고, 개념적 설계를 진행한다. 각각의 팀이 설계한 과제물에 대해 게시판을 통해 1차 토의하고, 강의시간에 교수님과 2차 토의를한다. 토의에서 나왔던 내용을 중심으로 과제에 대한 리뷰를 작성해보도록 한다. 요구사항 첫 설계의 요구사항은 다음과 같다. 하나는 UNIVERSITY DB로, 일반적으로 대학교에서 학생, 학부, 과목 등을 관리하는 요구사항이다. 두 번째는 MAIL_ORDER DB로, 쉽게 말해 구매 서비스다. 개체와 속성, 관계 추출 먼저 ERD를 그리기 전, 텍스트로 개체와 속성, 관계를 추출하는 과제를 수행하였다. 이때 composite, complex attribute 등의 속성 특징과 관계를 속성으로 나타내는 것을 활용하였.. 2024. 3. 27.
[개발 일지] 배포 삽질기 | 심볼릭 링크, 리눅스의 Capacities, ufw, netstat 개요 새로운 프로젝트 배포 테스트를 하는 과정에서 했던 삽질에 대해 기록한다. 하나의 도메인 내에서 여러 포트를 사용하고, 또 여러 웹서버를 사용하는데 제대로 서버/네트워크를 파악하지 못할 시 시도해볼만한 것들이다. 내가 진행한 서버의 개략적인 상황은 다음과 같다. HTTP/HTTPS 요청 80, 8085, 8080 - Tomcat, Apache, java application 이 중에서 8080은 서버(platform) 역할을 한다. 8081 - Node.js(React), Nginx 일단 Ningx 웹서버 위에 React 프로젝트를 올리는 건 따로 포스팅할 예정이다. 여기서는 정말 내가 했던 삽질, 날 것을 다룬다... 까먹지 않으려고 기록하는 용이고 필요하다면 키워드를 통해 다른 사람도 활용할 수 .. 2024. 3. 25.