본문 바로가기

분류 전체보기

(147)
REST REST (Representational State Transfer) -Http를 이용한 서버를 구현할때 지켜야 하는 설계 원칙 -서버와 클라이언트 사이의 결합성(Coupling) 감소에 목표를 둠 -성능 향상 -확장성 확보 -사용 편의성 증대 사용자(클라이언트)는 데이터 표현의 상태(게시물 폼)를 전달을 하고 서버는 그 데이터 표현의 상태를 데이터 베이스라는곳에 저장한다. 1. 클라이언트 서버 Architecture -클라이언트와 서버의 역할 분리 -서버는 데이터가 어떤 방식으로 표현되는지 몰라도 됨 -클라이언트도 데이터가 어떻게 저장되는지 몰라도 됨(댓글 쓸때 게시글 article_id(FK)를 고려하지 않는다.) -양측의 독립적 발전을 추구 2. Stateless -클라이언트가 보내는 개별적인 요청..
aws 배포방법 팁 중요 pem 키 생성하기 인스턴스 시작 pem 키 권한 부여 chmod 400 yourPemKey.pem 서버에 ssh(secure shell)로 접속 ssh -i ubuntu@ 접속후 자바 설치 방법 sudo apt update 자바 JRE 설치(실행만 되면 됨) sudo apt install openjdk-17-jre-headless 설치 확인 java --version 레포지토리 클론 git clone https://github.com/joshiaLee/Mission_blinding.git gradlew로 빌드하기 ./gradlew bootJar 애플리케이션 시작 java -jar build/libs/lion-0.0.1-SNAPSHOT.jar aws 보안 설정해줘야함 보안 -> 보안 그룹 -> 인바..
git 사용법 꿀팁 모음 git pull 할때 병합방식 선택해 주어야한다 git config pull.rebase false (변경 사항을 가져오고 현재 브랜치와 가져온 변경 사항을 하나로 합치는 방식, 즉 내가 작성한게 가장 최신으로 덮어진다) git branch -현재 리포지토리에 있는 모든 브랜치의 목록을 확인 -현재 체크아웃된 브랜치는 별표(*)로 표시됨 git branch [브랜치 이름] -새로운 브랜치를 생성할 수 있습니다. -이 명령어는 새 브랜치를 만들지만, 자동으로 그 브랜치로 전환 X git switch 브랜치명 -브랜치명으로 브랜치 전환 git switch -c 브랜치명 -브랜치명으로 새로운 브랜치를 만들고 switch까지 함 git log --oneline --graph --all 현재 브랜치들이 어떻게 갈..
연관관계 편의 메서드 왜 연관관계 편의 메서드로 양쪽에 값을 모두 세팅해야 하는가? 1. 1차 캐시로 인해 쿼리가 안나가고 메모리상에서 바로 꺼내질수 있음 2. 테스트 케이스 작성시 JPA없이 작성해야 할때도 있기때문이다. public void setBoard(Board board) { // 기존 연관된 board가 있으면 제거 if (this.board != null) { this.board.getComments().remove(this); } // 새로운 board 설정 this.board = board; // 새로운 board가 있으면 해당 board에 현재 comment 추가 if (board != null) { board.getComments().add(this); } }
[BOJ 2482] 색상환 난이도가 있는 dp문제다. 언제나 그렇듯이 dp는 테이블로 시작해서 테이블로 끝난다. dp는 테이블만 잘 설계한다면 물리적으로 내부동작이 어떻게 되든지 상관없이 논리적으로 답이 도출된다. 테이블이 설계가 안된다면 수열을 노가다로 찾아야 하는데 실수할 여지도 많고 시간이 얼마나 걸릴지도 알수 없다. 테이블을 잘 설계하면 이전값들의 결과가 현재값에 영향을 끼쳐야하는 형태가 돼야한다.(끊어지지 않고 이어지는 형태) 서론은 여기까지 하고 이제 이문제를 풀어보자. 일단 d[i][j]는 i개 중에서 j개를 선택하는 경우의 수라고 테이블을 설계했을때 딱 두가지 경우만 생각하면 이문제는 풀린다. 1. 첫번째 색을 포함할 것인가? -> 첫번째를 제외한(이미 뽑았음으로) 나머지 n-1개 중에서 k-1개를 마저 뽑는다. 2..
[BOJ 2293] 동전 1 나는 왜 이문제를 못풀었을까? dp문제를 풀때 규칙이 바로 보이지 않으면 손을 놓고 머리속으로만 풀려고 하는 안좋은 습관이 있다. 규칙이 보이지 않으면 손을 부지런히 움직여서 규칙이 보일때까지 시행착오를 겪으면서 발견해야하는데 발견하지 못할것 같다는 두려움과 손을 놀려야 한다는 귀찮음 때문인것 같다. 그렇다고 머릿속으로만 생각하면 난 천재처럼 머리속에 화이트보드가 있는것도 아니니 초 스피드로 사라지는 휘발성 메모리를 가지고 dp 문제를 풀라고하니 가당치가 않았던 것이다. 고등학교 수열과 마찬가지로 dp는 무조건 규칙 찾기이고 그때 당시 '자기 손으로 지저분하게라도 직접 풀어내는것이 베스트'라는 어떤 수학강사의 말이 다시금 떠올랐다. 다시한번 상기하자 dp는 수열이고 수열의 핵심은 규칙찾기고 노다가를 해서..
[BOJ 11055] 가장 큰 증가하는 부분 수열 다이나믹 프로그래밍에서 가장 중요한것은 테이블을 어떻게 정의하는것이다. 항상 문제를 푼다는 마음이 급해서 테이블 정의를 소홀히해서 오히려 문제를 못풀고 헤매는 경우가 많았다. 따라서 DP 문제는 반드시 테이블을 정의하는것이 시작이라는것을 깨달아야 한다. 테이블에 따라서 문제가 간편해 질수도 복잡해 질수도있다. (일단 테이블이 내가 말하는대로 생각한대로 무조건 동작한다고 가정하자.) 테이블만 잘 설계하면 나머지 조건식들은 적절히 구성해서 답을 도출할수 있다. 수학처럼 점화식으로 떨어지기도 하거나 전에 구했던 식에서 한단계씩 확장하는 모습일수도 있다. 이문제에서는 증가하는 수열의 합인데 DP로 풀지 않는다면 증가하는 이라는 조건을 그때그때 조건식으로 추려내기가 쉽지가 않다. 그렇다면 DP를 이용해서 전단계에..
BOJ 복습용 필수문제 큐 + 코테 팁 인덱스가 헷갈리면 머리로 풀어서 번아웃 오지 말고 노트에 적으면서 진행해라 EASY MODE: 개념 복습용 문제 큐 HARD MODE: 심화 코테용 문제 큐 스택 2493 탑 HARD MODE 6198 옥상 정원 꾸미기 HARD MODE 17298 오큰수 HARD MODE 덱 11003 최솟값 찾기 HARD MODE BFS 4179 불! EASY MODE 7569 토마토 EASY MODE 5427 불 EASY MODE 9466 텀 프로젝트 EASY MODE 2206 벽 부수고 이동하기 EASY MODE 2146 다리 만들기 HARD MODE 1600 말이 되고픈 원숭이 HARD MODE 14442 벽 부수고 이동하기 2 HARD MODE 16933 벽 부수고 이동하기 3 HARD MODE 16920 확장..