전체 글 205

no main manifest attribute, in *.jar

문제 스프링 프로젝트를 진행하다가, 클라우드에 띄우기 위해서 도커파일을 작성해야했다. 도커파일을 작성하기 위해 자바에서는 .jar 파일이 필요했고, 나는 처음에 gradle의 jar 를 실행했다. build/libs/ 에 .jar 파일이 생기긴했지만, plain.jar 형태였다. 그냥 그 jar 파일을 커맨드에서 java -jar *.jar 로 실행했더니 아래와 같은 오류가 떴다. No main manifest attribute, in *.jar 해결 plain.jar에는 Main 클래스에 대한 정보가 담겨있지 않아서 이러한 오류가 난다고 한다. 따라서 우리는 ~plain.jar 파일이 아닌 ~.jar 파일을 생성해야한다. 방법은 간단하다, gradle에서 bootJar를 실행시켜주면 된다. 이 Grad..

Error Record 2023.08.30

[5주차] 목표 달성 백준 장학금 with 제로베이스

목표 달성 백준 장학금 with 제로베이스에 대한 5주차(회고록) 보고서를 작성합니다. 1. 설정한 목표와 목표 달성 결과 공유 백준 장학금을 신청하면서 내가 설정한 목표는 아래와 같이 3가지이다. 일주일에 코딩 테스트 5문제 이상 풀기 인프런 강의 2주에 하나 이상씩 듣기 블로그에 공부한 것들을 일주일에 5개 이상씩 쓰기 목표에서의 핵심은 이상이다. 나에게 있어서, 습관은 존재하지 않았었다. 언제나, 어딘가에 적어놓고 그것을 계속 상기하며 자신에게 주입한다. 지금까지 이런 식으로 지내오면서 느낀 단점 중 한가지는 '정해진 목표까지만 한다'는 것이었다. 계획된 목표를 완수하면, 끝이라고 판단하고 그 날에는 목표치 이상을 실천하지 않았다. 그래서 이번 목표에는 꼭 이상이란 말을 추가했다. 주어진 정량까지만..

기타 2023.08.27

Github Actions을 통해 CI 구현하기

안녕하세요!! 저번 글에서 CI/CD가 무엇인지 간단하게 알아봤습니다. 그러면 CI/CD를 어떻게 구현하는지 어떤 툴을 사용하는 지를 알아볼 필요가 있겠죠?? 오늘은 많은 툴 중에서 Github Actions 기능을 활용해보도록 하겠습니다!! 1. 초기 세팅 우선, 깃헙 리포지토리에 등록해야 사용할 수 있으므로, 테스트 파일과 함께 작성해줍니다. practice.py def isEqual(x, y): if(x==y): print("x and y are the same number.") return True else: print("x and y are not the same number.") return False print("Trun on") 위 실습은 단순히, github의 Actions 기능을 사용하..

기타 2023.08.27

CI/CD란?

안녕하세요! 개발 공부를 하다보면, 참 많이 듣는 단어 중에 하나가 바로 CI/CD인데요. 개발자에겐 필수적으로 요구되면서, 협업할 때 유용한 CI/CD!! 오늘은 CI와 CD에 대해서 알아보도록 하겠습니다. 1. CI(Continuous Integration) Continuous Integration의 약자로, 직역하면 지속적인 통합입니다. 개발자들은 서로 하나의 서비스를 구현하는데, 각기 다른 부분을 맡아 작업하게 됩니다. 이러한 상황에서, 여러 기능들을 통합(Integration)하는 과정에서, 충돌이나 버그가 생길 수 있게 됩니다. 이러한 부분을 CI를 통해서 자동으로 빌드를 하고 테스트를 하는 등 소스코드의 충돌을 방어하는 역할을 해줍니다. 2. CD(Continuous Development) ..

기타 2023.08.25

[파이썬/Python] 도커 이미지를 생성하고 배포해보자

오늘은 도커 이미지를 생성하고 도커 허브에 배포하는 과정까지를 작성해보겠습니다. 그 전에, 이전에 작성된 도커에 관한 글을 읽고 오시면, 조금 더 도움이 되실 수 있습니다. 2023.08.24 - [기타] - [도커/Docker] Docker, Docker compose란? [도커/Docker] Docker, Docker compose란? 오늘은 Docker와 Docker compose에 대한 간단한 개념에 대해서 작성해보도록 하겠습니다. 1. 도커란? 우리는 종종 개발할 때, 나는 되지만, 상대방은 안 되는 경우를 종종 볼 수 있습니다. 이는 개발환 studyblog4244.tistory.com 우선, 이미지를 만들 서비스가 필요합니다. 저희는 도커 이미지를 빌드하고 배포하는 것이 목적이므로 매우 간단..

Python 2023.08.24

[도커/Docker] Docker, Docker compose란?

오늘은 Docker와 Docker compose에 대한 간단한 개념에 대해서 작성해보도록 하겠습니다. 1. 도커란? 우리는 종종 개발할 때, 나는 되지만, 상대방은 안 되는 경우를 종종 볼 수 있습니다. 이는 개발환경이 각기 다르기 때문입니다. 예를 들어 내가 사용하는 자바 버전이 11이기 때문에 스프링을 2.x 대로 사용하지만, 같이 협업하는 사람이 자바 버전을 17을 사용하여 스프링을 3점대로 사용한다면 버전이 맞지 않아 오류가 발생할 수 있죠. 도커는 이러한 경우를 해결해줄 수 있습니다. DOcker에서는 내 컴퓨터에서 개발하고, 그것을 이미지로 만들어 배포한다면 제 이미지를 다운받아 사용할 때 제 컴퓨터에서의 환경과 동일한 환경이 세팅되어 사용자가 사용할 수 있게 됩니다. (간단한 설명이니, 참고..

기타 2023.08.24

[백준/BOJ] 16933번 벽 부수고 이동하기 3 (자바/Java)

1. 문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 이동하지 않고 같은 칸에 머물러있는 경우도 가능하다. 이 경우도 방문한 칸의 개수가 하나 늘어나는 것으로 생각해야 한다. 이번 문제에서는 낮과 밤이 번갈아가면서 등장한다. 가장 처음에 이동할 때는 낮이고, 한 번 이동할 때마다 낮과 밤이 바뀌게 된다. 이동하지 않고 같은 칸에 머무르는 경우에도 낮과 밤이 바뀌게 된다. 만약에 이동하는 도중에 벽을 부수고 이..

BOJ/BFS DFS 2023.08.24

[4주차] 목표 달성 백준 장학금 with 제로베이스

목표 달성 백준 장학금 with 제로베이스에 대한 4주차 보고서를 작성합니다. 1. 4주차 경과 이번 주 코딩테스트는 재귀와 백트래킹에 대해서 다뤘습니다. 평소 제가 생각하는 사고 방법은 "절차 지향적 사고"였습니다. 당연히 다른 코테 문제를 푸는데는 문제가 없었을 수 있지만, 재귀를 다루는 알고리즘인만큼 여러 문제들을 푸는데 어려움을 많이 겪었습니다. 처음에는 "재귀적 사고" 자체가 무엇인지 감을 잡지 못하고, 그저 문제풀이 방법이나 공식을 외워서 푸는데 불과했는데, 응용 문제들을 풀면서 그러한 방식으로 문제를 해결하기에는 한계를 느꼈고 조금 더 해당 알고리즘들에 대한 이해를 기반으로 문제에 접근했습니다. 물론 많은 문제들을 풀어보면서, 해답을 보는 경우도 있었지만, 적어도 "재귀적 사고"가 무엇인지를..

기타 2023.08.20

[JPA] @Id의 마법(feat. @GenerateValue)

오늘은 JPA를 공부하면서, DB의 전략에 따라 @Id가 부리는 마법(?)에 대해서 조금 다뤄보려고 합니다. em.persist 저희는 지금까지 em.persist()를 통해서 비영속 상태의 엔티티를 영속 상태로 변환한다는 것을 알았습니다. 또한, 우리가 em.persist()를 하는 순간에는 DB에 바로 반영이 되지 않고 커밋되는 시점에서야 비로소 DB에 저장된다는 것을 익히 알고 있을 것입니다. 하지만 이 것은 틀렸습니다. 예를 들어서, 반례를 들어보죠. 저희가 아래와 같은 Member 엔티티를 구성했다고 해봅시다. @Entity @Getter public class Member { @Id @GeneratedValue private Long Id; private String name; } 여기에서 P..

JPA 2023.08.18

[JPA] 복합키 등록하기

프로젝트를 진행하던 중, 데이터베이스에서 두 개의 PK를 갖게되는 상황이 발생하였습니다. 그래서 오늘은 JPA에서 복합키로 DB를 설계하는 방법을 알아보겠습니다. 복합키란? 간단하게 말하면, PK(자연키)가 2개 이상 존재하는 것을 의미합니다. PK는 DB에서 유일성을 보장하는 속성을 의미하는데, 그러한 PK를 두 개로 지정함으로써, 유일성을 갖게 합니다. 예를 들면, 아래와 같은 DB가 있다고 해봅시다. 이 DB에서는 일정 시간마다 모든 식당의 현재 인원을 받아온다고 가정합니다. 여기서 만약 우리가 PK를 한개만 잡는다면, 유일성을 보장하지 못하므로 적절하지 않습니다. 물론 ID 속성을 넣어서, 유일성을 보장하게 할 수 있지만, 저희는 이 속성값만 사용해서 PK를 만들어야한다고 해봅시다. 그러면 저희가..

JPA 2023.08.18