분류 전체보기

    외래키를 "지양"해야하는가?

    개발 공부를 하면서 외래키를 지양하라는 글을 봤다. 학교수업 및 다양한 강의에서 외래키를 사용하라는 내용은 많았다. 하지만 인프런에서 강의를 듣다가 외래키를 "지양"하라는 내용은 처음 봤기 때문에 관련된 많은 내용을 찾아보고 아래와 같이 정리했다. 외래키를 지양하라는 내용의 핵심은 아래와 같다. 외래키 없이도 조인을 걸 수 있다. Insert, Update, Delete 작업시 락 경합을 유도하고 성능을 저하시킴 https://martin-son.github.io/Martin-IT-Blog/mysql/foreign%20key/performance/2022/02/28/foreign-key-Performance.html 외래키, 성능에 어떤 영향을 미칠까? 외래키 (Foreign Key)란? 외래키는 MyS..

    [JAVA 자바] 프로그래머스 PCCP 모의고사 3번 유전법칙

    https://school.programmers.co.kr/learn/courses/15008/lessons/121685 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 재귀로 풀수있는 문제다. 다른풀이보면 스택과 큐로도 풀었던데 스택과 큐로는 잘 모르겠다. 재귀로 풀때 핵심 재귀로 풀때 핵심은 주어진 세대와 인덱스[3,25]를 받아서 값이 있는 부모까지 재귀를 타고 부모의 값을 찾았다면 그에 해당하는 자식값을 리턴하는식으로 풀 수 있다. 무슨말이냐면 2세대의 인덱스가 1일때는 3을 리턴하고 2세대의 인덱스가 2일때는 4를 리턴한다고 치자. 5세대부터 재귀..

    [JAVA 자바] 프로그래머스 과제 진행하기

    https://school.programmers.co.kr/learn/courses/30/lessons/176962# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 굉장히 까다로운 구현문제다. 여러 조건들이 있고 그 조건을 하나도 빼먹으면 안 되며 문제에 정확히 명시돼있지 않더라도 예외 케이스들을 다 추가해서 구현해야 한다. 배열 VS 우선순위큐 배열을 정렬한 뒤 index를 사용해서 값을 구해도 되고 우선순위큐를 사용해도 되는데 배열을 사용할 경우 까다로운 조건문안에서 매번 index++로 인덱스를 추가관리해야 하기 때문에 우선순위큐를 사용했다. 현재 ..

    [JAVA 자바] 백준 2179

    https://www.acmicpc.net/problem/2179 2179번: 비슷한 단어 첫째 줄에 S를, 둘째 줄에 T를 출력한다. 단, 이 두 단어는 서로 달라야 한다. 즉, 가장 비슷한 두 단어를 구할 때 같은 단어는 제외하는 것이다. www.acmicpc.net 가장 먼저 떠오른 방법은 모든 문자의 모든 경우를 구하는 방법이다. 하지만 입력길이가 20000이기 때문에 N * N * 100으로 시간초과가 난다고 판단했다. 떠오른 방법은 문자를 1자리 2자리 3자리 ...N자리로 다 나누고 set에 넣어 비교하는 방식을 생각했다. S와 T를 저장해서 출력해야 하는데 이 방식은 접두사가 같은 문자를 찾아도 S를 찾을 수가 없었다. 결국은 Map에서 키로 자른문자 value로 원본문자를 넣어서 S와 T..

    도커와 도커컴포즈

    도커와 도커컴포즈

    배경 향수 추천 서비스를 사용하다가 부트캠프에서 제공하는 EC2서버가 만료됐고 도메인을 유지하고 싶어서 서버 이전 작업을 했다. 기존 서버에 설치했던 파일의 버전을 일일이 찾아서 설치하고 이후 세팅을 메모해놓은 뒤 하나하나 설치하는 게 여간 불편한 게 아니었다. 그래서 아래와 같이 여러 이슈들이 발생했다. https://tte-yeong.tistory.com/127 AWS EC2 서버 이전시 발생한 이슈들 -SQLGrammarException: could not extract Result Set 상황 부트캠프에서 제공해주는 EC2의 기간이 끝났다. 이 서버를 aws 프리티어로 옮기는 과정에서 여러 이슈들이 발생했다. 서버에서 설치한 파일, 설정한 명령어 모두를 기록해놔서 어려움이 없 tte-yeong.t..

    CI CD with 젠킨스

    CI CD with 젠킨스

    배경 향수 추천 서비스를 개발하면서 수동 배포를 사용했다. 인간 젠킨스라고 불리며 push 할 때마다 sh파일을 실행시켜서 빌드를 하면서 여간 불편한 게 아니었다. 다음 프로젝트는 반드시 CI CD를 사용해보자 결심했고 애니메이션 추천 서비스에서 젠킨스를 사용했다. CI CD 젠킨스를 하기 전 CI와 CD에 대해서 간단히 짚고 넘어가자 CI란 무엇인가? 지속적 통합이라는 뜻으로 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다. CI가 있기 전엔 Merge Day라는 날짜를 정해서 개발자들이 모여서 별도로 합치는 작업을 했다. CI를 사용한다면 기능을 잘게잘게 쪼개서 코드 작성이 완료될 때마다 이를 병합할 수 있다. CD란 무엇인가? 지속적 배포라는 뜻으로 ..

    JWT 토큰

    배경 애니메이션 추천 서비스를 개발하면서 JWT를 사용했다. 사용자가 로그인할 때 인증할 필요가 있었고 여러 방법을 비교해본 결과 토큰을 사용한 방식이 그나마 가장? 안전했고 대표적인 토큰 방식인 JWT를 사용했다. JWT토큰 이전에는 어떤 방식으로 인증했는지 그리고 왜 JWT가 탄생했는지에 대해 간단히 알아보자 인증과 인가 들어가기에 앞서 인증과 인가에 대한 개념을 잡고 가야 한다. 인증이란 식별 가능한 정보로 서비스에 등록된 유저의 신원을 입증하는 과정이다. 풀어서 설명하면 회사의 사원증과 같은 개념으로 닉네임이나 사진 같은 정보로 어떤 회사의 회원인지 확인하는 절차이다. 인가란 인증된 사용자에 대한 자원 접근 권한을 확인하는 것이다. 사원증을 예로 들면 인턴의 경우 회사 내에 접근 불가능한 곳이 몇..

    [프로그래머스] 혼자 놀기의 달인 자바

    https://school.programmers.co.kr/learn/courses/30/lessons/131130?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 처음에 cards안에 card를 기준으로 방문체크를 하면서 dfs를 순회했는데 테케5번에서 에러가 낫다. 코드를 자세히 보니 dfs로 들어갈 때 현재 내 배열이 아니라 다음 배열에 true표시를 하는 것 같았고 card로 순회하지 않고 배열 인덱스를 기준으로 순회하니 해결됐다. 틀렸던 코드 package programmers.level2; import java..

    도커컴포즈 + 스프링부트 + nginx + mysql connection refused

    상황 프론트에서 백으로 요청 시 400 에러가 발생했다. Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection 에러와 함께 Connection refused에러도 함께 발생했다. 시도해본 방법 spring.datasource.url=jdbc:mysql://mysql_chu:3303/chuanione?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Seoul mysql_chu는 도커컴포즈의 컨테이너 이름이다. 로컬에서 테스트할 땐 mys..

    도커컴포즈 + 스프링부트 + nginx + react 404 에러

    상황 로컬에서 테스트를 한 뒤 서버에 푸시를 하고 프론트에서 백으로 요청을 보내면 404에러가 발생했다. 404에러면 url이 잘못된건데 눈씻고 찾아봐도 잘못된 url이 보이지 않았다. 시도해본 방법 굉장히 많은 방법을 시도했지만 기억나는 것만 서술하겠다. package.json에 proxy 추가 "proxy": "http://{스프링 도커 컨테이너 이름}:8080", 또는 서버 url axios경로에는 서버url 설정 baseURL: "http://{url}/api/v1/", nginx.conf location /api { proxy_pass http://백엔드도커컨테이너 이름:8080; 그 외에 도커컴포즈파일들을 이리저리 만져보고 network도 추가해봤다. 최종 docker-conpose.yml s..