Personal Study 19

[Docker] Dockerfile 설정

FROM openjdk:11-jdk EXPOSE 8080 CMD ["./mvnw", "clean", "package"] ARG JAR_FILE=./build/libs/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "-Xms4G", "-Xmx8G", "app.jar"] - spring.profiles.active = prod : 기본적으로 활성화할 profile을 prod로 설정. S3 버킷 설정 때문에 production profile을 생성하기 위해 설정을 추가했다. - Xms4G, Xmx8G : java heap space가 부족하다는 알림 때문에 docker에서는 설정을 추가해주었다..

[AWS] AWS 인바운드 규칙 설정하기 (feat.초보자)

AWS, Spring 관련 글에서 다뤘듯이 나는 백엔드 초보자다. 특히 AWS는 캡스톤 프로젝트를 하면서 처음 접했기에 아예 아는 게 전무한 수준이었다. 내가 가장 애를 먹었던 부분은 인바운드 규칙이었는데, 아는 게 없으니 당연히 인바운드 규칙도 어떻게 적어야 하는 지 몰랐다. 나같은 사람들을 위해 포스팅을 적는다. 외부에서 서버 접근하기 외부에서 서버를 접근하기 위해서는 해당 IP가 인바운드 규칙에서 허가되어야 한다. 먼저 puTTY 같이 SSH 연결을 하는 경우에는 유형을 SSH로 잡아야 한다. 소스 유형은 사용자 지정, Anywhere, 내 IP로 나뉜다. 사용자 지정은 내가 원하는 아이피를 소스에 넣을 수 있다. Anywhere는 말 그대로 어느 곳에서든 SSH로 접근할 수 있다는 뜻이다. (보안..

Personal Study/AWS 2022.09.24

[AWS] EC2가 너무 느려질 때 램 늘리기

spring boot 프로젝트 ./gradlew build를 하는데 너무 느렸다. 정말 말도 안 되게 느려서 타자도 안 쳐지고, 엔터 쳐지는 것도 1분 뒤에 콘솔에 반영될 정도였다. 혹시 저장소가 문제인가 싶어 마그네틱에서 범용 SSD로 바꿔봤지만 그대로였다. 정말 절망적이었는데 구세주 같은 글을 발견했다.. https://velog.io/@shawnhansh/AWS-EC2-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%8A%A4%EC%99%91 AWS EC2 램 늘리기(feat. 스왑) 이제 gradle이 멈추지 않습니다✨ velog.io 이 글은 위 글을 참고하여 작성되었습니다. (단순 아카이빙 목적입니다.) 나도 위 글을 보기 전까지는 인스턴스를 중지, 시작을 반복했다. (이렇게 하면 서..

Personal Study/AWS 2022.09.24

[Spring] [AWS] Spring boot + Mysql + docker-compose AWS에 배포하기

캡스톤으로 백엔드를 맡게 되었는데 아무것도 경험해보지 못한 것들 투성이라 정말 정말 정말 많은 오류들을 만났다... 팀플이다보니 포기할 수도 없고 그냥 죽기살기로 성공해야만 했는데 다행히 성공했다! 그 과정들을 기록 겸 블로그에 공유한다. docker-compose는 물론이고, Spring도 처음, AWS 배포도 처음입니다. 따라서 다음 글에는 오류가 있을 수 있으며 잘못된 부분은 지적해주시면 감사하겠습니다. Spring 프로젝트는 배포할 어떤 프로젝트도 좋다. 나는 캡스톤 프로젝트를 사용했다. Dockerfile 만들기 FROM openjdk:11-jdk EXPOSE 8080 CMD ["./mvnw", "clean", "package"] ARG JAR_FILE=./build/libs/*.jar COPY..

[Spring] Thymeleaf TemplateInputException 해결

스프링 인 액션 책을 따라하면서 나타났던 오류이다. 다음과 같은 상태였다. package com.example.spring_in_action; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } Welcome to... 다음과 같은 오류가 발생했다. org.thymeleaf.exceptions.TemplateInputException: Error resolving template [ho..

[C] 배열을 초과하여 데이터를 넣을 수 있을까?

결론부터 말하자면 가능하다 #include #define MAX_SIZE 10 int stack[MAX_SIZE]; int top = -1; int is_full() { if (top >= MAX_SIZE - 1) { return 1; } return 0; } int is_empty() { if(top == -1) { return 1; } return 0; } void push(data) { if(!is_full()) { stack[++top] = data; } } int pop() { if(!is_empty()) { return stack[top--]; } } int main() { push(1); push(1); push(1); push(1); push(1); push(1); push(1); push..

[Python] itertools 정리

요즘 완전 탐색 문제를 푸는데 itertools가 필요한 부분이 많다. 정리를 안 해두니 계속 똑같은 레퍼런스 보면서 코딩하는데, 정리해두고 내 포스팅 보면서 공부하려고 정리한다. itertools의 여러가지 기능 중에서도 조합형 이터레이터에 대한 포스팅이다. 설명은 docs.python.org 에서 참고하였다. itertools 효율적인 looping을 위한 iterator를 만드는 모듈 조합형 이터레이터 - product(p, q, ... [repeat=1]) : cartesian product, 중복 조합 - permutations(p[, r]) : 모든 가능한 순서, 반복되는 요소 없음 - combinations(p, r) : 순서 정렬, 반복되는 요소 없음 - combinations_with_r..

[Python] 백준 11724 DFS 메모리 초과

평화롭게 백준 11724번을 풀고 있었는데 진짜 이해가 안 되는 상황이 발생했다. 코드가 계속 메모리 초과가 일어나기 시작한 것... DFS로 구현하고 있었는데 오기가 생겨서 BFS로 안 바꾸고 계속 풀어봤다. 그래도 계속 안 되길래 열받아서 다른 사람 코드를 가져와서 제출해봤는데 또! 메모리 초과가 떴다. import sys sys.setrecursionlimit(10**6) def dfs(start): visited[start] = True for index in graph[start]: if not visited[index]: dfs(index) n, m = map(int, input().split()) graph = [[] for _ in range(n+1)] visited = [False] * ..

[Android] [Kotlin] Splash 화면 만들기

앱은 콜드 스타트, 웜 스타트, 핫 스타트라는 세 가지 상태 중 하나에서 시작하며, 각 상태는 앱이 사용자에게 표시되는 데 걸리는 시간에 영향을 미친다. 콜드 스타트에서는 앱이 처음부터 실행되므로 시간이 가장 오래 걸리게 되는데, 이렇게 앱 로드, UI 준비 과정을 기다리며 보여주는 화면이 Splash (스플래시) 화면이다. 이전에 개발할 때에는 Splash 화면에 대한 이해도가 떨어져 Timer로 시간 제한 (3000 ms 정도)을 두고 구현했으나, 이는 콜드 스타트를 3000ms 만큼 지연시키는 결과를 낳는다. 그래서 이번에는 올바른 방법으로 구현해보았다. 먼저 theme.xml에서 다음 줄을 추가한다. @drawable/splash_drawable은 splash 화면을 어떻게 표시할 지 정의하는 부..

Greedy Algorithm

🙂 파이썬 알고리즘 인터뷰를 공부하며 적는 공부 흔적입니다. 그리디 알고리즘 바로 눈 앞의 이익만을 좇는 알고리즘 대부분의 경우에는 뛰어난 결과를 도출하지 못하지만, 드물게 최적해를 보장하는 경우도 있음 최적화 문제를 대상으로 한다. (특히 로컬 최적해) 최적해를 찾을 수 있으면 그것을 목표로 삼고, 찾기 어려운 경우에는 주어진 시간 내에 그런대로 괜찮은 해를 찾는 것을 목표로 함. 그리디 = 탐욕 선택 속성 + 최적 부분 구조 탐욕 선택 속성 : 앞의 선택이 이후 선택에 영향을 주지 않는 것 (선택을 다시 고려하지 않음) 최적 부분 구조 : 문제의 최적 해결 방법이 부분 문제에 대한 최적 해결 방법으로 구성되는 경우 → 이 두 가지 조건을 만족하면 최적해를 찾을 수 있다. (만족하지 않더라도 정답을 근..