목록분류 전체보기 (49)
세상에 나쁜 코드는 없다
개요Memory Management RequirementsRelocationProtectionSharingLogical OrganizationPhysical OrganizationMemory PartitioningFixed PartitioningPartition SizesPlacement AlgorithmDynamic PartitioningPlacement AlgorithmReplacement AlgorithmBuddy SystemRelocationPagingSegmentationSummary개요단일 프로세스 프로그래밍uniprogramming 시스템에서 메인 메모리는 OS의 kernel이 차지하고 있는 영역과 User Program이 차지하고 있는 영역으로 나뉘어 있다. Multiprogramming ..
API 설계내가 맡은 부분은 프로젝트의 메인 로직 부분인 팀과 관련된 부분이었다. 팀에서 요구되는 기능은 아래와 같다.팀은 2가지 분류로 나뉜다. (공모전 팀, 스터디 팀)각 팀에 대한 정보를 조회할 수 있어야 한다.공모전 팀은 특정 공모전에 해당하는 팀들을 모아 볼 수 있어야 한다.스터디 팀은 스터디의 세부 분야 (어학, 자격증, 프로그래밍 등)에 따라 모아볼 수 있어야 한다.팀 조회시 최신순과 마감순으로 정렬하여 확인할 수 있어야 한다.팀을 생성 및 수정할 수 있어야 한다.사용자는 원하는 팀에 신청할 수 있다.팀의 개설자는 신청한 팀원의 정보를 확인하고 팀원으로 승인하거나 거부할 수 있다.사용자는 마이페이지에서 자신이 참여하고 있는 팀의 정보를 확인할 수 있다. 위 기능을 수행하기 위해 구성된 API..
ScouterScouter는 APM(Application Performance Management) 소프트웨어로 서버의 성능을 모니터링 하기위한 도구이다.오픈소스여서 무료로 사용할 수 있다.ConceptScouter Server (Collector)모니터링할 데이터를 수집하는 서버이며, 데이터는 자체 제작된 내부 DB에 저장된다.Scouter AgentScouter Agent에는 Host Agent와 Java Agent가 있다.Host Agent : CPU, MEMORY, DISK 의 데이터를 전달한다.Java Agent : Heaps, TPS, Response time, Service Profile 등의 데이터를 전달한다.Scouter Client스카우터 서버에 접속하여 수집된 정보를 확인할 수 있는 ..
application.yml 파일 분리하기Spring Boot에서는 application-{profile}.yml 와같은 포맷으로 application.yml 파일을 분리하여 빌드 시 특정 profile에 대한 파일이 적용되게 할 수 있다.각각의 profile에는 별도의 포트를 지정해 주어서 추후에 한 서버에서 dev와 prod 프로그램이 동시에 실행될 수 있게 했다.dev 환경에서는 더미데이터가 존재하는 개발용 DB와 연결되게 하였고, prod에는 실제 운영할때 사용할 DB에 연결하게 하였다.각각의 yml 파일에는 env라는 변수를 놓고 local, dev, prod라는 값을 주어 프로그램 내에서 환경에 대한 값을 사용할 수 있게 하였다. 이후 build.gradle 에 다음과 같은 코드를 통해 gra..
요구사항 다음 4개의 도메인에 ssl 인증을 통한 https 접속이 될 수 있게 해야 한다.www.dev.dongaribang.shopdev.dongaribang.shopwww.prod.dongaribang.shopprod.dongaribang.shop만약 http로 접속이 오는 경우, https 로 리다이렉트 해야 한다.해결리버스 프록시 서버 세팅nginx 설정 파일을 작성해 주었다. certbot은 지금 생성한 설정 파일들 중 알맞은 domain name 을 가진 파일을 찾아 https 에 대한 설정을 추가해준다.nginx 설정 파일이 들어갈 위치는 /etc/nginx/conf.d/ 이다.sudo vi /etc/nginx/dev.dongaribang.shop ## 이후 아래 작성 server { li..
정의 회문(Palindrome)은 똑바로 읽어도 거꾸로 읽어도 같은 문자열을 의미한다.ex. 기러기, 토마토, 스위스, 인도인, 별똥별 … 회문 판별 알고리즘 회문 판별을 위한 가장 직관적인 방법은 첫 문자와 끝 문자부터 시작하여 안쪽으로 차례차례 비교하는 것이다. bool isPalindrome(string s) { int size = s.size(); for(int i = 0; i< size/2; i++) { if(s[i] != s[size-1-i]) return false; } return true; }이 경우 문자열이 회문인 경우 N/2 번의 반복문이 실행되므로 O(N)O(N)O(N) 의 시간복잡도를 갖는다. 부분 문자열 회문 찾기 알고리즘 주어진 문자열이 있을 때, 부분 문자열 중 회문인 문자..