전체보기
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 정리, 인프런 김영한 스프링
스프링 토이프로젝트를 하나 만들긴 했지만 내가 한 것은 기술을 어떻게 사용하느냐지, 어떻게 만들어졌는가는 생각하지 않았다. 모든 분야가 그렇듯 동작 원리에 대해 이해해야 더 좋은 코드를 작성할 수 있기 때문에 스프링 그 자체에 대해 공부를 조금 해 볼 예정이다. 인프런의 김영한님의 강의를 몇 개 들을 예정이다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard 이 글은 위 링크에 있는 강의를 정리한 글이다. 이후에 유료강의들은 비공개로 정리할 예정이고. 1. 프로젝트 환경설정 1) 프로젝트 생성 나는 VS Code ..
[Lombok] Lombok의 Getter, Setter with VS Code
@Getter @Setter annotation attribute에 붙이면 해당 attribute에 getter, setter method가 생기고 class에 붙이면 class의 모든 attribute에 생김. 변수 이름이 asdf면 getAsdf() setAsdf() 이 함수들이 생성이 됨. VS Code에서 작동하지 않는 경우 1) extension에서 Lombok Annotations Support for VS Code 설치 2) build.gradle dependency에 아래 코드 추가 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
[Docker] Docker 데몬 run error 해결
cannot connect to docker daemon at unix ///var/run/docker.sock 에러 -> sudo dockerd 접근 권한 에러 -> sudo chmod 777 /var/run/docker.sock
[Docker] Docker - push / pull
https://youngmind.tistory.com/entry/Docker-%EA%B0%95%EC%A2%8C-4-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%801 Docker 강좌 - 4. 도커 이미지1 - 도커이미지 만들기 Docker Images docker registry에서 필요한 docker image를 검색할 수 있다. [root@cent154 ~]# docker search centos NAME DESCRIPTION .. youngmind.tistory.com 1. docker push docker login을 치고, id/pw를 입력해 로그인한다. docker images를 치고 뭐가 있는지 봐본다. > docker images; REPOSITORY T..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 5. 자잘한 수정사항
1. local에서 F5나 build해서 실행하면 잘 되었는데, docker 환경/서버에 올리니까 안됨! 아래 게시글을 참고했다. return "~.html"을 할 때 습관적으로 제일 앞에 /를 붙여 절대경로로 만들어서 문제가 생겼던 것 같다. 빼니까 잘 된다. https://devkingdom.tistory.com/149
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 4. EC2 배포
1. EC2에 인스턴스 생성 IAM 계정으로 시작하는 것을 추천한다고 한다. (IAM 계정은 해킹당하더라도 다른 container에 권한이 부족하기 때문에 접속 불가) 1) instance 시작 2) AMI 선택 3) instance type 선택 4) instance detail 선택 5) storage 추가 6) 태그 추가 7) 보안 그룹 설정 서버 접속을 위한 SSH 접근은 포트 22번, 웹 서버 활용을 위한 포트는 443으로 적용되었다. 8) 키 페어 선택 ssh 접속을 위해 필요한 파일이라 한다. 이것이 있어야 인스턴스에 접속할 수 있다는 것 같다. 9) instance 확인 뭔가 돌아가고 있다. 상태 검사가 검사 통과 상태면 인스턴스 실행 중이라는 것이다. 2. EC2에 인스턴스에 접속 1) ..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 3. 검색기능Search
1. 검색기능 - SELECT resources/templates/list.html의 검색하기 버튼을 누르면 /board/search로 GET method가 요청된다. 요청이 가면 controller에서는 boardService.searchPost(keyword) method를 이용해 해당하는 DTO만 SELECT하게 하고, 받아온 DTO list를 model에 addAttribute한 후 return하자. 1) Controller /src/main/java/com/example/testcompose/controller/BoardController.java package com.example.testcompose.controller; import com.example.testcompose.dto.Boar..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 2. 게시글 CRUD
1. 게시글 작성, Create 앞 게시글에서 spring의 구조에 대해 다루었다. Controller, Service, Repository, DTO, Entity를 복습하자면 아래와 같다. 해당 프로젝트에서 service는 JPA interface인 repository를 불러올 것이다. - controller controller는 client의 요청을 받아서 처리해준다. controller는 service를 호출해서 요청을 처리한다. - service service는 business logic을 수행한다. - Repository spring data JPA는 repository라는 interface를 제공한다. JPA를 추상화 한 것으로, interface에 맞는 규칙대로 입력하면 spring이 알아서..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 1. 전체 구조 잡기
https://victorydntmd.tistory.com/325 https://velog.io/@max9106/Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1 위 두 글을 바탕으로 구성하고, 진행했다. 1. 수정사항, 의존성 설정, 전체적 구조 잡기 개발환경 IDEA : VS Code Java : openjdk 11 Gradle : 7.0.2 Spring Boot : 2.5.2 Docker : 20.10.7 라이브러리 MySQL : DB JPA : DB와 연동을 위해 필요함 Thymeleaf : resource/templates에 있는 html 파일을 읽어오기 위해 필요함 Lombok : NoArgsConstructor라는 Con..
[Docker] Docker로 백엔드(Spring Mysql) 구성하기
1. volume을 이용해 Docker가 local file 참조하게 해서, 코드 변경 반영하게 하기. https://github.community/t/docker-not-working/181304 https://devlog-wjdrbs96.tistory.com/311?category=902375 위 두 글을 참고했다. 먼저, 어제 작성한 dockerfile을 바꾼다. FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] FROM openjdk:11-jre-slim WORKDIR /root ADD ./build/libs/demo-0.0.1-SNAPSHOT..
[Socket.io] socket.io 간단한 예제
간단한 예제를 만든다. 먼저, socket.io는 각 client에서 라이브러리를 로딩해주는 socket.io의 client, 그리고 서버를 구성하는 socket.io가 있다. var server = http.createServer(app); const io = require('socket.io')(server); // connection이라는 이벤트가 발생하면 유저 연결이라는 신호를 주고, 아래 2개의 이벤트가 발생하면 callbak해줌. // chat message라는 이벤트가 발생하면 io에서 msg를 emit하고 // disconnect라는 이벤트가 발생하면 유저의 연결을 끊어 줌. io.on('connection', (socket) => { console.log("a user connected"..
[Git] 깃랩 gitlab
다른 컴퓨터를 추가로 등록시켰다. 처음에는 gitlab 로그인을 github로 했었어서 자꾸 password를 요구하는데, 나는 등록한 적이 없어서 당황스러웠다. 그래서 gitlab에서 password를 등록했더니 잘 됐다. 먼저 새 컴퓨터에서 등록하려면 git config --global user.name "이름" git config --global user.email "내 이메일@내 도메인" 으로 입력한다. 이후 branch를 추가해야 하는데, 새 컴퓨터에서 작업할 경로를 path, gitlab의 내 프로젝트 도메인 url을 url이라 하면 cd path git init git remote add origin url 이라 하면 된다. 이후의 사용 방식은 다른 git과 동일하다(아직 branch 충돌 ..
[Node.js] 프로젝트 미어캣 서버 연결하며 있었던 이슈
1. mixed content error https server에서 http로 요청하면 안 된다. 그러한 규칙이 있다. 2. 서버에 SSL 적용 그래서 서버에 ssl을 적용하려 했다. 기존 nginx에 적용되고 있던 인증서를 그대로 express에 적용하려 했으나 문제가 발생했다. 그래서 express는 8081에 배포, nginx는 8082에 들어오는 것을 ssl 설정해서 8081로 포트포워딩하는 방식을 채용했다. 3. trust anchor for certification path not found 오류 openssl을 이용해 새 인증서를 발급받고 그걸 node server에 적용함으로써 해결했음. 개발 서버의 local은 해당 서버의 ssl이 적용되어서 그런 게 아닐까... -> 시간이 지나니까 해..
[React Native Tutorial] React Native + Expo + Android Emulator on Windows (feat. GCP)
이전 게시글에서 VM을 만들고 guacamole로 window vm에 접속하는 방법을 배웠다. 이제부터는 android emulator를 돌리기 위한 과정을 밟을 것이다. https://hyelie.tistory.com/entry/Deploy-Window-Server-on-WEB-using-guacamole-feat-GCP?category=947331 Windows RDP through WEB using guacamole + code-server (feat. GCP) guacamole을 이용해서 GCP의 window VM을 web에 띄우는 방법을 연구해 봐야겠다. 이렇게 생각하게 된 이유는... 0) 메인 개발용으로 code-server를 vm에 상시 띄워두고 있다. 1) react native 개발을 ..
[GCP Tutorial] Windows RDP through WEB using guacamole + code-server (feat. GCP)
guacamole을 이용해서 GCP의 window VM을 web에 띄우는 방법을 연구해 봐야겠다. 이렇게 생각하게 된 이유는... 0) 메인 개발용으로 code-server를 vm에 상시 띄워두고 있다. 1) react native 개발을 해야 하는데, 그걸 못한다. (사지방 환경 수쥰..) 2) 원래 검색 서버로 ubuntu를 쓰고 있었고 계속 켜 두고 있었는데, 많이많이 느리다. 1. 다른 GCP VM에서 instance를 켜고 끌 수 있게 설정 먼저 code server를 올린 곳에서 gcloud를 설치해야 원격 켜기/끄기가 가능할 것이다. 아래 링크를 참고해 항상 열어둘 서버(상시 서버라고 하겠다)에서 gcloud를 설정한다. https://cloud.google.com/sdk/docs/insta..
소프트웨어 마에스트로 12기 회고록
이 글은 2021년 4월부터 12월까지 소프트웨어 마에스트로 12기 활동을 하면서 배웠고 느꼈던 것들에 대한 회고록입니다. 지원과 합격 처음에 소마를 알게된 계기는 SW개발병으로 입대하기 위한 것들을 찾으면서였다. SW개발병 면접단계에서 BoB나 소마 활동 경력이 있으면 10점을 가점으로 준다. 당시에는 그게 큰 줄 알고 소마를 하고 SW개발병으로 꼭 입대해야지! 했다. (입대한 이후에는 의미없진 않지만 크게 의미있진 않은 것 같다) 코테 공부를 한 1.5달 정도 하고, 코테를 치고, 면접을 보고 합격했다. 기억상 코테가 그렇게 어렵진 않았다. 해봤자 DFS BFS 문제였고 제일 어려운 문제가 DFS cycle 탐색 문제였으니까. 매달 100만원씩 받겠다, 이 김에 서울에 자취하면서 활동하기로 결심했다...
[Security] 1:1, group E2EE 암호화 방법 ***TODO
(작성 중 - 암호화 로직(소인수분해, 이산대수), 디피헬만 작성하기) 읽기 전에 비대칭키 암호화(public/private key), 대칭키 암호화(shared key)에 대해 알고 있어야 합니다. 대칭키 암호화 암호화와 복호화를 할 때 같은 키를 사용하는 암호화 방식입니다. Alice가 Bob에게 메시지를 보낸다고 가정했을 때 프로토콜은 아래와 같습니다. Alice와 Bob이 shared key를 공유합니다. Alice는 shared key로 메시지를 암호화합니다. 해당 암호문을 Bob에게 전달합니다. Bob은 전달받은 암호문을 shared key로 해독합니다. 비대칭키 암호화 암호화와 복호화를 할 때 다른 키를 사용하는 암호화 방식입니다. 공개키-개인키가 한 쌍을 이루며, 공개키로 암호화한 암호문은..
오늘 미팅 내용
원래는,,, 겨울 인턴을 하려고 했었는데 스낵 24 대표님과 미팅을 하면서 생각이 조금 바뀌었다. 진짜 창업가들을 보면 그 불꽃에 홀리는 느낌이다. 겨울에 작은 프로젝트 하나를 제안해 주셔서 인턴 대신 그걸 해도 되지 않을까? 생각한다. 어떻게 보면 나에게 필요한 직무(대용량 데이터, 백엔드 서버 구성)이니까. 먼저,,, 인맥에 대한 생각. K 멘토님은 사람들을 소개시켜 드리고, 그 사람들로 사람들을 소개받아서 인적 네트워크를 구성하라고 하셨다. 물론 필요하고, 사람이 중요하단 것은 아는데, 2가지 이유 때문에 꺼려진다. 1) 군대 때문에. 1.5년 후에 지금 구축한 네트워크가 남아 있을까? 2) 모르는 사람과 대화하는 게 힘들다? 질문에 대답하는 건 쉬운데, 이야기를 오래 끌고가고 서로 공통된 관심사를..
컴퓨터 구입 프로젝트 1차 심의 끝!
소마 IT기기 지원금 200으로 컴퓨터를 샀다. 원래 있던 벤큐 144 모니터가 피벗이 된다는 걸 알아서, 똑같은 모델을 하나 구입했고(필자는 FPS를 자주 해서, 144hz 지원되는 xl2411p였다. 해당 모델은 단종되어서 업그레이드인 xl2411k를 구매했는데, 굉장히 만족한다. 더 가볍기도 하고, 옵션 돌리는 버튼도 훨씬 좋다.) 2411k를 본 모니터로, 구형 2411p를 세로로 세워서 피벗으로 사용하고 있다. 피벗 모니터를 지금까지 왜 안 샀나 싶다. 작은 노트북 메인으로 보는 것보다 4배는 가독성이 좋다. 특히 검색 창 위아래로 쭉 보이면서 한 눈에 다 보이는게 여간 편한 게 아니다. 체감상 능률 1.5배는 상승했지 싶다. 그리고, 소마 1차 프로젝트 기획을 끝냈다! 우리 팀은 팀원의 지인으..
5/26 - 5/28 design thinking
SWM에서 지원해주는 디자인 띵킹을 갔다. SAP korea에서 진행했다. 전 체적으로 재밌었다. 처음에는 네트워킹(다른 연수생들과 인맥)을 위해서 갔는데, 내용적으로 많은 것을 배운 것 같다. 아래의 내용은 내 생각을 서술한 것이다. 먼저 디자인 띵킹이란, 소비자가 만족할 만한 제품을 만들기 위해 거치는 일련의 cycle이다. 그것을 위해 1) 문제 정의 및 소비자와 동기화 2) 디자인 - ideate, prototype, validate 과정을 거쳐야 한다. 문제 정의에서는, 소비자에 대한 분석, 소비자 인터뷰 등을 통해 소비자가 원하는 것을 파악한다. 이렇게 소비자를 분석한 이후에는, 디자인 과정을 거친다. ideate 단계, 즉 아이디어를 만들어내는 과정에서 브레인스토밍을 계속한다. 여기서 제일 ..
0514 해커톤
소마에서 flask를 사용해서 back-end 해커톤을 진행했다. 짜면서 제일 신기했던 게 try-except-finally, try-except-else이다. try에서 POST request를 받고 오류가 발생하면 except로 넘어가고, except에서 BAD REQUEST를 리턴해주고, finally에선s GOOD REQUEST를 리턴해 주었다. try: // POST form parameter 검사 exception Exception as E: return "bad request!" finally: return "good request!" 그래서 try에서 진행하는 POST form parameter를 검사 한 후 오류가 있으면 bad request를 리턴할 줄 알았다. 그런데.. https:/..
0313 - 소마 2차 코딩테스트
14시 -16시 소마 12기 2차 코테 치름 1 품 - BFS, 경로 탐색 문제. 2 품 - 딱보니까 어려워서 맨 마지막에 풀었음 문제 풀다 생각났는데 DFS로 cycle의 최대 크기를 리턴하는 문제였음. 문제가 그래프로 안생겨서 떠올리는 데 오래 걸렸지만... 비슷한 문제를 푼 적이 있었어서 어찌저찌 품 3 품 - 저번 6번문제랑 비슷했음. 다만 이번에는 2차원이라서 좀 더 귀찮았다. 중간에 오타 있어서(N이랑 M이랑 순서를 안줘서 ㅋㅋㅋ 왜안되지 했네...) 뇌절 조지게 옴. 오타 좀 줄여봐야 겠다.... 4 품 - join
0227 공부 - 소마 1차 코테
14시 -16시 소마 12기 1차 코테 치름 1 품 - backtrack(스킬트리) 2 못품 - 합이 a에 가까운 수 : two-pointer 3 못품 - greedy인거같은데... 4 품 - 단순 구현 5 품 - hash (두더지 문제) 6 품 - backtrack 7 품 - string 비교 - SQL 8 안품 - web문제 푼 문제는 보자마자 풀이가 생각나서 바로바로 풀 수 있었는데, 구현하는 데 너무 오래 걸림. 역시 구현력이 많이 떨어지는 듯... 특히 4번 5번 6번은 보자마자 바로 풀 수 있었는데(7번까지 1시간 걸렸음) 1번 구현하는 데 너무 오래 걸렸음. 오늘은 이제 쉬고 내일은 네이버 자소서 작성하고 그다음에... 이제부터 프로그래머스 2/3단계 풀고, 백준 풀고, 백준 어느정도 수준이..
SW마에스트로 12기 지원서 작성
올 한해 휴학하면서 취업길을 뚫을 생각이다. PS 위주로 풀어가면서 '플젝이 적어도 네카라같은 기업 코딩테스트를 압도적으로 뚫으면 합격하지 않을까?'라는 생각으로, 정말 벽을 뚫는다는 생각으로 1학기 휴학하고, 여름방학 SES를 하고, 2학기 (당연히 대학원을 갈 줄 알고 미뤘던) 군대를 갈 예정이다. 군대 정보를 찾던 중 SW마에스트로라는 연수를 알게 되었다. 재미있어 보여서 지원했다. 지원서 글감은 오래 전부터 생각했으나 주르르륵 쓰는 건 오랜만이다. 일단 따로 저장해 뒀으니 합격하고 나면 합격 후기를 올리고, 떨어지면 피드백 관련해서 여기다가 글을 써야겠다. -
[Node.js] Node.js + typescript MVC 코딩 패턴
Node.js 코딩 패턴 이 구조에 대해 좀 더 자세히 이해하려면 node.js MVC 패턴인 Routes-Controller-Service에 대해 좀 자세히 알아야 할 것 같다. 먼저 각각의 용어에 대한 설명은 다음과 같다. Route Request end point를 어디에서 처리할지, 즉 경로와 그 경로에 대한 처리 함수들을 모아 둔 곳이다. 다음과 같은 형식으로 이루어져 있으며, [PATH]가 호출되었을 때 [Controller 함수]를 호출하는 역할을 한다. router.get([PATH], [Controller 함수]); Controller 사용자에게 어떤 값을 전해줄지 가공하는 부분. Service로부터 값을 받아와서 http header나 body에 값을 넣고 예외처리하고, 응답하는 역할을..
[Utils] ngrok
사지방이나 container와 같은 환경에서 포트를 바꾸고 열어주려면 방화벽에 들어가 새로운 포트를 열어줘야 한다. 그러나, 귀찮다! 그래서 nrgok을 이용해 터널링으로 public에서 내 포트로 접속할 수 있게 열 수 있다. 아주 편리하다! 다음 링크에서 다운로드 받을 수 있다. [다운로드 링크] 다운로드 페이지에서 설치했다면 ngrok의 토큰을 등록해야 한다. 다음 링크에서 로그인을 하자. [ngrok 로그인] 로그인 했다면, 다음 링크에서 connect your account 부분을 복붙하자. [token 가져오기] 이후, 다음 명령어를 이용해 해당 포트로의 우회가 가능하다. ngrok http [PORT]
[Node.js Tutorial] Install NVM & typescript-express-starter on Ubuntu
1. NVM 설치 Ubuntu에 Node.js를 설치하기 위해 NVM - node version manager - 를 설치할 것이다. 공식 github에서 버전을 확인 한 후, 설치한다. https://github.com/nvm-sh/nvm/#install--update-script 아래 명령어들로 설치할 수 있다. 나의 경우, react native와 같이 사용할 것이기 때문에 13.6 버전을 설치했다. # 버전은 공식 git에서 확인 한 후 변경 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/vx.xx.x/install.sh | bash source ~/.bashrc nvm install node # 최신 버전 설치 nvm install xx.xx #..
[N2T] Tistory Open API 앱 등록
Naver2Tistory를 사용하기 위해서는 Tistory Open API에 블로그를 등록하고 App ID, Secret Key를 받아오는 과정이 필요하다. 먼저 아래 링크에 접속한다. https://www.tistory.com/guide/api/manage/register TISTORY 나를 표현하는 블로그를 만들어보세요. www.tistory.com 위와 같이 앱을 등록한다. 서비스 URL/CallBack은 Naver2Tistory를 사용할 티스토리 블로그 주소를 입력하면 된다. 등록했다면 앱 관리에 들어가서 설정을 누르자. 위 사진에서 모자이크된 App ID, Secret Key부분을 config.json에 적어넣으면 된다. 나의 경우 이 블로그 ID는 hyelie이고, 위 사진에 있는 App ID..
[Java] HttpURLConnection으로 HTTP 통신하기
Overview 자바에서 HTTP 연결을 할 때, 일반적으로 HttpURLConnection을 사용한다. python의 경우 .request method에 여러 가지가 override되어 있어 HTTP 연결 방식(GET, POST, ...), parameter, 파일 입력 여부 등등을 함수의 인자로 넣으면 알아서 처리를 해 준다. 그러나 자바는 그런 게 없다. 따라서 연결 방식, parameter, 파일 입력 등을 직접 header와 body에 작성해 주어야 하고, 그 결과도 response code에 따라 error stream인지, 정상적인 stream인지 판단을 해야 한다. 따라서 해당 글에서는 Java에서 HttpURLConnection을 사용하는 방법을 설명하고자 한다. HttpConnectio..
22.09.08. 풀었던 문제들
백준 단계별 31 MST 2887 SVEMIR MST 문제이긴 한데, 단순히 MST로 풀면 안 되는 문제이다. 처음에 주어진 vertex의 개수가 10만 개이기 때문에, 이들 사이의 모든 edge를 고려한다면 10^2이 되어 메모리초과, 또는 시간 초과가 나게 된다. 따라서 규칙을 찾아서 풀어야 하는 문제였는데, 이 문제에서 dist는 min(x1-x2, y1-y2, z1-z2)이기 때문에 각 vertex 좌표를 입력받고, 정렬하고, 인접한 값의 차이로만 edge를 구성하면 된다. 왜냐하면, point가 a b c 순서일 때 kruskal의 정의 상 smallest edge부터 사용하기 때문에 b - a, c - b를 사용한다. 이 때 a -> c는 a -> b -> c로 표현되기 때문에 a -> c의 ..