์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JPA
- redis ํ ์คํธ์ฝ๋
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- docker compose
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- nGrinder
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- ์คํํ๋ ๋ฏธ์ค
- @RestControllerAdvice
- AWS Certified Solutions Architect - Associate
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- ๋ค์ค ์ปจํ ์ด๋
- docker-compose kafka
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- aws saa ํฉ๊ฒฉ
- Kafka
- private subnet ec2 ๋ก์ปฌ ์ ์
- Codedeploy ์ค๋ฅ
- docker ps -a
- redis ์กฐํ
- docker
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- Entity
- ํ๋ก๊ทธ๋๋จธ์ค
- prod docker-compose
- s3 log ์ ์ฅ
- ์๋ฐ
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- ํ์ดํผ๋ฐ์ด์
- aws ์ฟ ํฐ
- Today
- Total
๋ชฉ๋ก๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (104)
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tXneU/btsL457VwGH/Tb5miLo3Er1kBtaZJCVB31/img.webp)
์๋ฐํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฟ ์๋๋ผ ์ฌ๋ฌ๊ฐ์ง ์ํํธ์จ์ด์ ๋ช ์ธ๋ก ๊ตฌ์ฑ๋ ๊ธฐ์ ์์คํ ํฌ๋ก์ค ํ๋ซํผ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ์ ๊ณต์๋นํ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ ๊ฐ์ท๋ค.๋ฐํ์์ ํซ์ฝ๋๋ฅผ ๊ฐ์ง, ์ปดํ์ผํ๊ณ ์ต์ ํํ์ฌ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต์์ ์ฑ๋ฅ์ ๋ด๋๋ก ๋์์ค๋ค.ํ์ค API ํ๋ถ, ์๋ง์ ๊ธฐ์ ๊ณผ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์๋ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.์๋ฐ ๊ธฐ์ ์์คํ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ ๊ฐ์ ๋จธ์ ์์์ ๋์ํ๋ ์ฝํ๋ฆฐ, ํด๋ก์ , JRuby, ๊ทธ๋ฃจ๋น ๋ฑ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ทธ ์ธ ๊ด๋ จ ํ๋ก๊ทธ๋จ๋ค๋ ์๋ฐ ๊ธฐ์ ์์คํ ์ ์ํ๋ค.์ ํต์ ์ผ๋ก ์๋ฐ ๊ธฐ์ ์์คํ ์ ๋ค์ ์์๋ค์ ํฌํจํ๋ค.์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(๋ค์ํ ํ๋์จ์ด ํ๋ซํผ์ฉ) ์๋ฐ ๊ฐ์ ๋จธ์ ๊ตฌํํด๋์ค ํ์ผ ํฌ๋งท์๋ฐ..
๋งค์ผ ์ฝํ ๋ฌธ์ ๋ฅผ ํ๊ณ ์์ง๋ง ๋ธ๋ก๊ทธ์๋ ์ค๋๋ง์ ์ฝํ ๋ฌธ์ ๋ฅผ ์ฌ๋ ค๋ณธ๋ค. 1. ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ(Lv.2) ๋จ์ BFS ๋ฌธ์ ์ด๋ค. ์ผ๋ฐ BFS๋ฐฉ์์ผ๋ก ํ๋ฉด ์ฝ๊ฒ ํ๋ฆฌ๋ ๋ฌธ์ ์ด๋ค. ๋ค๋ฅธ ์์ด๋ฉด cnt++ ํ๊ณ bfs๋ก ํด๋น ์์ ๊ฐ์๋ฅผ ์ธ์ max_cnt๋ฅผ ๊ฐฑ์ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ์๋ค. import java.util.*; class Solution { static boolean[][] visited; static int[] dx = {1, 0, -1, 0}; static int[] dy = {0, -1, 0, 1}; static int max_cnt; public int[] solution(int m, int n, int[][] picture) { visited = new boolean[m][n]; in..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dueFef/btsF0E2AwYu/XQiXEhlpdpekKO6djMsKE0/img.png)
ํ์๋ ์ฒ์์๋ ์๋ฆผ ํ ์ด๋ธ์ ๊ตฌํํํ ๋๊ธ์ด ๋ฌ๋ฆฌ๋ฉด ์๋ฆผํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ก ์ ์ฅํ์๊ณ , API๊ฐ ํธ์ถ๋๋ฉด ํด๋น ์ฌ์ฉ์์ ์๋ฆผ ๋ฐ์ดํฐ๋ฅผ DB์์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค. ํ์ง๋ง ์ด๋ฐ polling ๋ฐฉ์์ ์ ํด์ง ์ฃผ๊ธฐ๋ง๋ค ๋ฌด์กฐ๊ฑด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ํธ๋ํฝ์ ๋ฐ์์ํค๋ฉฐ, ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋์ง์๋๋ค๋ ๋จ์ ์ด ์๋ค. ๊ทธ๋์ ํ์๋ Kafka๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฆผ ์ด๋ฒคํธ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , Server-Sent Events(SSE)๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ค์๊ฐ์ผ๋ก ์๋ฆผ์ ์ ๋ฌํ๋ ์์คํ ์ ๊ตฌํํด๋ณผ๊ฒ์ด๋ค. ๊ฒ์ํ์ ๊ธ์ ๋๊ธ์ด ๋ฌ๋ฆฌ๋ฉด ์๋์ด ์๊ธฐ๊ณ , ์๋ฒ๋ Kafka๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ์ฒ๋ฆฌ๋ ์๋์ SSE๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ์กํ๋ ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/3Pevd/btsFZFnDvDn/b2DyacU2hljYmYMe2MUnHK/img.png)
Docker์ Kafka๋ฅผ ์คํ์์ผ ํ ํฝ ์์ฑํ์ฌ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์๋ณผ๊ฒ์ด๋ค. Kafka๋ฅผ ๋์ปค์ ๋์ฐ๊ธฐ ์ํด ์ปดํฌ์ฆ ํ์ผ์ ์์ฑํ๋ค. ๋์ปค ์ปดํฌ์ฆ ํ์ผ์ ํด๋น ๋ด์ฉ์ ์ถ๊ฐํด์ค๋ค. version: '3.8' services: zookeeper: image: wurstmeister/zookeeper:latest container_name: zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka:latest container_name: kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 vo..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cIWBYv/btsFUjSdEEW/Yj3gZpPysp42WJKzrEOMW1/img.png)
๊ณผ๊ฑฐ ํ๋ก์ ํธ์์ ๋ก์ปฌ์ ์ด๋ฏธ์ง๋ ํ์ผ์ ์ ์ฅ, ์กฐํ, ๋ค์ด๋ก๋ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ ์๋ค. ์ด๊ฑธ ์ด์ S3์ ์ ์ฅํด๋ณด๊ณ ์ถ์ด ํ๋ฒ ๋ฆฌํฉํ ๋ง์ ํด๋ณด์๋ค. ์ฐ์ ๋ฉํฐํํธ(Multipart) ํ์ผ ๊ด๋ จ ์ค์ ์ ํด์ค์ผํ๋ค. spring: servlet: multipart: enabled: true # ๋ฉํฐํํธ ์ ๋ก๋ ์ง์์ฌ๋ถ (default: true) max-file-size: 100MB # ํ๊ฐ ํ์ผ์ ์ต๋ ์ฌ์ด์ฆ (default: 1MB) max-request-size: 100MB # ์ด์ S3๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผํ๋ค. implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' ๊ทธ๋ฆฌ๊ณ S3 ๋ฒํท๋ฅผ ๋ง..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/EHonH/btsFLTllgWx/YwCMVW67i8HEd3NRe9NpP0/img.png)
์ด์ ๊น์ง ์ค์ ํ Docker Compose ํ์ผ์ EC2์ ๋ฐฐํฌ๋ฅผ ํด๋ณด์. Docker Compose๋ฅผ ๋ฐฐํฌํ EC2 ๋ฅผ ์์ฑํํ ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ค. ssh ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์ด๋ฐ์ pem ๊ฒฝ๋ก์์ ํฐ๋ฏธ๋ ์คํํ ssh -i "ํค.pem" ~ ์ด ๋ช ๋ น์ด๋ฅผ ๋ณต๋ถํ๋ฉด ๋๋ค.ํ๋ฉด์ ๋ณด์ด๋ EC2 ์ธ์คํด์ค ์ฐ๊ฒฐ๋ก ํด๋ ์ ์์ด ๊ฐ๋ฅํ๋ค. ํฐ๋ฏธ๋์์ ๋ค์ด๋ฐ์ pemํค ๊ฒฝ๋ก๋ก ๊ฐ์ ssh๋ก ์ ์ํ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ๋ถ์ฌ๋ฃ์.ํ์๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ์๋๋ฐ Permissions 0644 for 'ryusun-creditmarket.pem' are too open. It is required that your private key files are NOT accessible by others. This priva..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Q1Sfv/btsFPp5z1YI/aWY7fnmLQTgXV5STD0Wk5K/img.png)
์ธ๋ฑ์ค ํ ์ด๋ธ์ ๋์ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์๋ฃ ๊ตฌ์กฐ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์์ค๋ค. ์๋ฅผ ๋ค์ด, ์ฑ ์ ์ฐพ์๋ณด๊ธฐ๊ฐ ์์ ๋ ํน์ ์ฃผ์ ๋ ๋จ์ด๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฑ ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐพ์๋ณด์ง ์๊ณ , ์ฐพ์๋ณด๊ธฐ์์ ํด๋น ๋จ์ด๋ฅผ ์ฐพ์ ๋ฐ๋ก ํด๋น ํ์ด์ง๋ก ๊ฐ ์ ์๋ฏ์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ ๋น์ทํ ์ญํ ์ ํ๋ค. ์ธ๋ฑ์ค์ ์ฅ์ & ํจ๊ณผ ๊ฒ์ ์ฑ๋ฅ ํฅ์: WHERE ์ ์์ ํน์ ์นผ๋ผ์ ์ด์ฉํ ์กฐ๊ฑด ๊ฒ์์ด ๋นจ๋ผ์ง๋ค. ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ํ ์ด๋ธ ์ ์ฒด๋ฅผ ์ค์บํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ํ์ ์ฐพ์์ผ ํ๋ค. ํ์ง๋ง ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋น ๋ฅด๊ฒ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ์กฐ์ธ ์ฑ๋ฅ ํฅ์: JOIN ์ ์์ ์กฐ์ธํ ๋ ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ์กฐ์ธ์ ์ํํ ์ ์๋ค. ์ด๋ ๋ ํ ์ด๋ธ ๊ฐ์ ๋งค์นญ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/d6PnVc/btsFCBUHH7K/lQjvDZKvzjftTuYO8KQoE1/img.png)
Scouter Scouter๋ ์คํ ์์ค ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ํด๋ก, ์ฃผ๋ก ์๋ฐ(JAVA) ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ฌธ์ ์ง๋จ์ ์ฌ์ฉ๋๋ค. ์ด ํด์ ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ฑ๋ฅ ์งํ๋ฅผ ์์งํ๊ณ , ๋ถ์ํ์ฌ ์ฑ๋ฅ ์ ํ์ ์์ธ์ ํ์ ํ๊ณ ๊ฐ์ ํ ์ ์๋๋ก ๋์์ค๋ค. Scouter๋ฅผ ์ฌ์ฉํ๋ฉด CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, SQL ์ฟผ๋ฆฌ ์ฑ๋ฅ, HTTP ์์ฒญ ์ฒ๋ฆฌ ์๊ฐ ๋ฑ ๋ค์ํ ์ฑ๋ฅ ์งํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ ์ ์๋ค. 1. ์ค์นด์ฐํธ ๋ชจ๋ํฐ๋ง TOOL ์ค์นํ๊ธฐ https://github.com/scouter-project/scouter/releases Releases · scouter-project/scouter Scouter is an open source APM (Application Performan..