분류 전체보기 441

[SpringBoot] 백엔드 프로젝트 중간점검

프로젝트가 거의 막바지에 달했다. 사실 아직 부족한 기능도 너무 많고 완벽하게 테스트도 이뤄지지 않은 부분이 많다고 생각했다. 뭐 그래도 마감일이 있으니 결과물은 내놔야하기에 이것저것 손보며 뚝딱뚝딱하고 있다. 같은 파트를 맡은 팀원분께서 개인 사정으로 너무 바쁘셔서 거의 참여를 하지 못하셔서 얼추 4주 정도를 혼자 작업한 것 같다. (사실 작업하면서 중간에 고비가 몇번 있어서 정말 힘들긴했다. 초반에 같은 파트 팀원 한분께서 갑작스레 못한다고 하셔서 나가시게 되었고 다른 파트에서도 또 한분이 나가시면서 전체적으로 인원이 줄어든 점도 있지만 이 부분에선 크게 힘든점을 느끼진 못했다. 그저 좋은 기회를 함께 하지 못한 것이 아쉬웠을 뿐이다. 그보다는 팀원분들과 연락이 잘 안되는면에서 답답한 부분이 있었던 ..

[SpringBoot] @RestController와 ResponseEntity

스프링부트로 진행중인 프로젝트에서 한참 리팩토링을 진행중이었는데 @RestController 를 사용하면 컨트롤러마다 @ResponseBody를 반복할 필요가 없다고 한다. 왜냐면 이미 @RestController 내에 선언되어 있기 때문이다. 그래서 @RestController로 바꾸어 주기로 했다. 그런데 보통 @RestController를 사용할 경우에 ResponseEntity를 사용하는 경우가 많다고 한다. 그래서 리턴 타입도 모두 ResponseEntity로 바꾸어 주었다. 예전에는 객체나 문자열 혹은 Long타입 변수를 그대로 프론트에게 던졌는데 지금은 ResponseEntity로 주다보니 통일된 느낌이라 좋은 것같다. 그리고 에러가 발생했을 경우 그 또한 통일되게 처리할 수 있는 방법이 장..

[WASM] 웹 어셈블리의 미래 - WebAssembly

브런치에 웹 어셈블리의 미래라는 글을 작성했는데 해당 글을 이곳에도 공유하고 싶어서 올리고자 한다. 아래 브런치 링크를 첨부한다. https://brunch.co.kr/@razelo/7 [WASM] 웹 어셈블리의 미래 WASM이란 무엇일까? | 웹 어셈블리라고 불리는 wasm은 2015년에 개발되어 비교적 최근에 나온 기술이다. 2017년에 발표되었고 지금까지 계속해서 개선되는 기술이다. C/ C++ / RUST와 같은 로우 레벨 랭 brunch.co.kr WEB 어셈블리라고 불리는 WASM은 2015년이라는 비교적 최근에 나온 기술이다. 2017년에 발표되었고 지금까지 계속해서 개선되는 기술이다. 주로 C/ C++ / RUST와 같은 LOW 레벨 랭귀지 즉 속도가 좋은 강한 타입의 랭귀지를 웹에서 쓰고..

Rust 2022.01.26

[Dev] 백엔드 개발자 로드맵(공통)

1. 백엔드 언어 택12. 프레임워크 택13. 데이터베이스 택1 4. jwt, 토큰, Oauth 5. 캐싱 - redis, memcached6. 메시지큐 - 카프카, rabbitMQ 7. 버전 컨트롤 - git8. 배포 - AWS, GCP , Firebase, Heroku  근데 사실 언어는 크게 상관없는것 같다. 완전 비탈길을 내려가는 언어가 아닌 이상 어떤 언어든 배워서 써먹을 수 있으면 그만이고 프레임워크도 마찬가지라고 생각한다. 그리고 위의 내용들보다 더 중요한건 영어다.영어가 가장 중요하다. 구할 수 있는 양질의 자료들의 99.9퍼센트가 영어로 되있다고 생각한다. 영어가 진짜 중요하다.  영어에 문제가 없다면... 노트북 한대만 있으면 된다.

개발 정보 2022.01.25

[SpringBoot] *.jar 백그라운드 실행하기 - $ nohup 명령어 &

springboot로 프로젝트를 진행하는 와중에 운영 서버에서 .jar 을 실행시켜놓으려고 하는데 백그라운드 실행을 시키기 위해서는 nohup 커맨드를 입력해야 한다. 평소에 실행시킬 때는 java -jar blabla-0.0.1-SNAPSHOT.jar 와 같이 실행했겠지만 백그라운드에서 실행시키기 위해서는 아래와 같이 명령어를 치면 된다. & 이 백그라운드라는 의미이다. nohup java -jar blabla-0.0.1-SNAPSHOT.jar & 즉 이 명령어를 치면 터미널 세션이 끊어져도 계속 실행된다. 이 명령어를 치면 nohup.out 파일이 생기는데 이 파일에 해당 jar파일의 출력들이 저장된다고 보면 된다. 실제로 위의 명령어들을 실행한 뒤에 ps -al을 실행해보면 아래와 같이 잘 실행하고..

[Intellij] Intellij에서 삭제했던 파일 혹은 코드 복구하는 방법

인텔리제이에 있는 흥미로운 기능을 발견했다. 이전에 삭제했던 파일이나 코드를 복구할 수 있는 기능이다. 예를 들어 아래와 같은 resources 폴더에서 log4j2.xml 을 삭제했는데 다시 필요한 경우가 있다고 가정하자. 깃에도 없고(?) 뭐 아무튼 아무튼 증발해버렸다면? 위의 resources 폴더에 마우스 우클릭을 한다. 그러면 위와 같이 Local History라는 메뉴가 뜰 것이다. 해당 Local History를 클릭하면 아래와 같은 화면이 나오면서 변경된 사항을 확인할 수도 있고 이전에 있었던 코드를 긁어올 수도 있다. 덕분에 살았다... 사실 진짜 실수로 지워서 복구할 필요가 있었다. 근데 그냥 CTRL + Z 누르면 되려나? 나중에 테스트해봅시다.

개발 정보 2022.01.25

java.lang.IllegalStateException: Ambiguous handler methods mapped for '/favicon.ico':

illegalStaeException 은 여러번 본적이 있지만 /favicon.ico는 뭘까? 배포중에 문제가 생겨 다시 로컬에서 부트를 띄우던 도중에 갑자기 위와 같은 에러가 발생했다. 사실 이전에 restapi 들의 경로를 바꿔주었던 작업에서 계속 작은 문제들이 잇따라 발생했는데 혹시 거기서 또 뭔가 발생하지 않았나 짐작하긴했었다. 결론부터 말하면 맞다. Controller의 경로가 중복되었을때 발생하는 고질적인 문제이다. 꼭 경로가 중복된 상황에서만 발생하는게 아니라 이외의 상황에서도 발생할 수 있는 에러이긴 하다. 그런데 신기한 점은 Ambiguous하다는 로그에 있다. 왜 모호하다는 표현을 썼을까? 위의 두 사진을 보면 api의 mapping에서 한군데는 filename이라고 되어있고 한군데는 ..

[SpringBoot] @PathVariable vs @RequestParam

둘 중 뭐가 더 나은지는 사실 성능상 상관없다. 상황에 따라 더 좋은 것을 쓰면 되는데 아주 미묘한 차이가 있다. (사실 이전까지는 뭐 별반 차이없을거라 생각해서 그냥 무작정 @RequestParam 만 잔뜩 써대고 있었다. ) 1. @ParhVariable은 어떠한 Resource를 식별하고 싶다고 하면 그때 사용하면 되는 것이고 2. @RequestParam은 정렬이나 필터링을 할때 사용하면 좋다. 즉 2번의 예시를 들자면 url에 파라미터로 특정 조건에 충족하는 사람만 조회해서 가져오고 싶다면 다음과 같이 쓰면 된다. localhost:8080/test/condition=good 이런 식으로 컨디션이 좋은 사람들만 골라서 가져오겠다는 식으로 말이다. 이럴때 @RequestParam을 쓰면 좋다. 이..

[기술서적] readITzine #3 - 앞으로 계속 나아가기

오랜만에 필요한 기술서적이 있어서 두권을 구입하게 되었는데 사은품 선택 란에 리드잇 zine 3호 라는게 눈에 띄었다. 예전에도 한번 사은품 목록에 올라왔던 적이 있었는데 원래 잡다한 것을 굳이 골라서 받아놓는 것을 좋아하는 성격이 아니라서 굳이 추가하진 않았다. 그런데 이번에 다른 사은품으로 올라온 노트가 마음에 들어서 추가할까 하다가 리드잇이 눈에 걸려서 궁금해서 추가해서 읽어보게 되었다. 결론부터 말하자면 정말 재밌다. 인터넷에 서치하다보면 꼭 기술에 관련된 디테일한 내용이 아니더라도 그와 연관있는 재미난 이야기를 해주시는 분들이 많이 계시다. 그런 분들의 글을 읽으면서 좋아요와 구독을 꾹꾹 누르고 다니는데 이 매거진은 그런 분들을 모두 모아서 한번에 만날 수 있는 매거진이다. 각기 다양한 분야에서..

[SpringBoot] org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL

프로젝트를 수정하는 도중 새로운 jpa 엔티티를 추가해서 진행하고 있었는데 ddl-auto: create으로 테이블을 생성해보니 org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL 이라는 에러가 발생했다. 분명 h2 디비도 잘 돌아가고 있었는데 왜 ddl 구문에서 에러가 발생했을까? 원인은 예약어에 있었다. 밑에 사진을 보면 컬럼 중에 like 라는 컬럼이 있다. 즉 like 는 이미 mysql에 존재하는 예약어이다. 즉 이 컬럼명을 likes로 바꾸던지 prefer로 바꾸던지 해서 문제를 해결하는 것이 좋다. 즉 프로그래밍 언어에서 int를 변수명으로 선언하는 것과 비슷한 경우랄까? 혹은 assert 를 변수명으로 ..

[Dev] 프로젝트속에서 발견한 것

요즘 백엔드 프로젝트를 진행하면서 꽤나 코딩에 열중하며 지내고 있다. 정말 많은 것들을 배운 시간이라는 생각이 들었다. 거의 마무리가 되었고(?) 이제 최종적으로 어느정도 테스트를 거치고 ec2에 배포하면 끝이다. 물론 이후에도 수정해야할 사항들이 많다. 다만 최소한의 핵심기능들이 돌아가게끔이라도 만들어놓고 이후에 추가적으로 코드를 리팩토링하고 추가 요구사항들을 추가할 일이 남아있다. 사실 완성본이라기 보다는 프로토타입에 가깝다. 후순위로 미뤄둔 기능들은 아직 구현도 하지 않았기 때문이다. 애초에 팀의 목표 자체가 빠른 출시였기 때문에 사실 다른 무엇보다도 빠르게 개발해서 일단 결과물을 만들어낸다는 점에 우선순위를 두었다.  이렇게 코딩에 열중한게 정말 오랜만이라는 생각이 들었다. 그러면서 문득 내가 지..

개발 정보 2022.01.19

[Git] .gitignore 가 적용되지 않을때

왜 언제가부터인가 .gitignore가 적용되지 않는다는 사실을 발견했다. 현재 프로젝트를 진행하면서 yml 파일을 제외시키려고 사용하고 있었는데 갑자기 안된다. 브랜치들을 살펴보니 그리 오래된것 같지는 않았고 커밋 서너번 전부터 이런 현상이 나타났던 것 같다. 해결법은 간단하다. git의 캐시문제라고 한다. git bash 에서 아래와 같은 명령어를 친다. (마지막에 점 찍는거 빼먹으지 마시구) 들고있던 캐시 전부 비워주자. git rm -r --cached . 그 다음은 하던대로 똑같이 진행해주면 된다. git add -A git commit -m "removed git cach" 뭐 이런 식으로 하던대로 진행되면 된다.

인프라/Git 2022.01.18

[Rust] 러스트를 배워봅시다! - Rust language 간단 후기1 - 재밌다!

며칠전에 러스트를 배워보고 싶다는 생각에 무작정 rust doc을 찾아서 읽었다. 공식 doc이 있는데 정말 상세하게 나와있는 doc이라는 생각이 들었고 읽는데 많은 시간이 걸리지도 않았다. 현재는 IO프로젝트까지 읽고 해당 grep 프로젝트 코드를 작성한 상태이다. 역시나 모든 언어에 존재하는 변수와 데이터 타입, 함수, 제어문들에 대해 배웠는데 한가지 흥미로운 점은 다른 언어에서는 볼 수 없었던 개념이 언어 전반에 녹아있다는 생각이었다. 예전부터 러스트를 관심갖고 지켜보면서 러스트로 만든 프로젝트 사이트들을 돌아다니면서 시간날때 꼭 배워봐야겠다는 생각을 하면서 어떻게 하면 속도와 메모리 안전성을 둘다 가져갈 수 있는지에 대해 많이 궁금했었다. 그리고 그와 관련된 내용으로 소유권과 참조자, 빌림에 대해..

Rust 2022.01.15

[Dev] powershell과 cmd의 차이

환경변수 세팅을 할 일이 있어서 cmd로 설정하는데 자꾸만 $env 가 먹히질 않아서 좀더 살펴보니powershell에서 하라는 안내를 읽지 못한 탓이었다. 그런데 아무리봐도 powershell이나 cmd 나 너무 비슷하고 명령어도 똑같이 작동하는데 둘이 다른건가...? 라고 생각했는데 알고보니 다른거였다.  즉 cmd보다 powershell이 훨씬 더 많은 명령어를 동작시킨다. 왜냐면 cmd가 개발되기 전에는 powershell이 없었고 powershell은 그 이후에 만들어진 신규 프롬프트이기 때문이다.  그래서 보통 악성 프로그램의 경우에 powershell 을 노리고 접근하는 경우가 더 많다고 한다. 할 수 있는게 더 많으니까...  그러니 응용 프로그램이 powershell의 권한을 요청한다면 ..

개발 정보 2022.01.15

[Rust] 러스트를 배워봅시다.

주변에서 러스트 꼭 써보라는 말이 있어서 차근 차근 공식 문서를 읽어보기로 했다. 공식 문서가 아주 잘 정리된 케이스여서 이 문서만 따라 읽으면 얼추 개념이 잡힌다는 얘기를 들었다. 예전부터 go 와 rust 중 뭘 공부해볼까 생각하고 있었는데 이참에 rust를 한번 해보면 재밌을 것 같다. 요즘 시간도 많아서 넉넉해서 잠시나마 시간내서 문서를 읽어볼 순 있을 것 같다. 두근 두근 아래 링크가 rust 공식 document 이다. https://doc.rust-lang.org/book/ 아래는 번역본이다. 참고로 번역 퀄리티가 정말 좋다. 감사합니다. https://rinthel.github.io/rust-lang-book-ko/ 들어가기에 앞서 - The Rust Programming Language ..

Rust 2022.01.12

[Dev] 개발 과정에서 발생하는 오류의 80퍼센트는 오타가 아닐까?

오전에 잠시 프로젝트 코드를 손볼일이 있어서 리팩토링을 하는 중이었다. 하던 와중에 일부 코드에 많은 변경을 하게 되었는데 이후에 자꾸만 에러가 나서 이것저것 찾아보려고 했던 참이었다.그런데 아무리 생각해도 에러가 나는 것이 이해가 가지 않아서 다시 꼼꼼히 살펴보니 오타를 발견했다. 어째 가만보면 혼자서 묵묵히 코딩하면서 발생하는 오류의 80퍼센트는 오타이지 않을까 싶다. 물론 완성된 결과물로 내놓고 난뒤에 발생하는 오류에서는 아니겠지만 그게 아니라 혼자서 만들어가는 과정 중에 맞닥뜨리는 오류를 말할때라면 정말 맞는 말인것 같다.  예전에 이런 식으로 오타가 있을 거라는 생각을 하지 못하고 하루종일 빙빙 돌고 돌아서 말그대로 엄청난 삽질을 했던 경험도 여러번 있었다.(진짜 말그대로 지옥이었다.) 조금은 ..

개발 정보 2022.01.12

[Git] git branch & commit convention 정리

유용하게 쓸 수 있는 깃 컨벤션을 정리해놓았다. 우리 팀에서 쓰던 건데 팀원분께서 친절히 정리해서 올려주셨다. 기왕이면 지켜서 쓰자. 🧬 Git Branch Convention 형태 : 이름/기능이름_날짜 1️⃣ 각 단어 전부 소문자 - E.g. nickname/signin 2️⃣ 한 기능을 자주 수정해야 할 때 날짜 붙이기(날짜 양식 : YYMMDD) - E.g. nickname/signin_211125 📝 Git Commit Convention 형태 : 커밋타입: 커밋 메시지 - E.g. Add: 카카오 로그인 구현 커밋 타입 리스트 - Add: 기능 추가 - Fix: 코드 수정 ❗️ 잘못된 코드 수정 - Delete: 기능 삭제 - Refactor: 코드 리팩토링 ❗️ 잘 되어있는 코드 수정 - T..

인프라/Git 2022.01.12

[SpringBoot] java.nio.file.NoSuchFileException tomcat에러

흔히 발생할 수 있는 에러인데 이번엔 좀 특이한 상황에서 발생해서 기록해두게 되었다. 프로젝트를 진행하면서 게시판에 글을 작성했을때 사진도 여러장 첨부할 수 있도록 만들고 있었다. MultipartFile을 List로 묶어서 다루고 있었는데 잘 작동하는지 확인해보기 위해서 컨트롤러에 사진과 글을 전달하고 사진을 다시 프론트에서 던져주는 방식으로 작성하였다. List이 return 되는 셈이었다. 아마 사진이 찍히는게 아니라 toString() 처럼 명세라던지 아니면 path라던지 어찌되었든 뭐가됬든 뭐라도 찍히는지 확인해보고자 리턴했는데 위와 같은 java.nio.file.NoSuchFileException 에러가 발생했다. 그리고 에러 로그를 읽어보면 정말 흥미로운 내용이 있다. 에러 사유에 tomca..

[Dev] 백엔드 면접 질문 리스트

괜찮은 면접 질문 리스트가 있어서 저장해둔다! 언젠가 도움이 될 것 같다.  출처: https://oolaf.tistory.com/123 신입 면접보러 다면서 받았던 질문들입니다.컴포넌트와 모듈의 차이자바란 무엇인가자바의 구동원리 (컴파일 순서 같은 ?)JVM의 특징객체 지향과 절차지향의 차이점객체지향 언어의 특징(상속 추상 등등 …)상속과 구현의 차이점 과 특징 및 장단점오버라이딩 오버로딩의 차이점과 특징기본형 변수와 참조형 변수가 뭐가있나스택오버 플로우가 왜일어나나메모리 누수가 무엇인가메모리 누수를 막기위해 어떻게 해야하나static에 대해 설명해봐라싱글턴이 무엇인가 ? 디자인패턴을 아나 ?익명클래스와 익명객체를 아나?문자열을 끊어서 가져오거나 문자열 검색자료구조 (어레이 링크드 벡터 , 해쉬 맵 셋..

개발 정보 2022.01.09

[C++] C++ 에도 annotation이 존재할까?

요즘 springboot를 사용하면서 프로젝트를 진행중이라서 잔뜩 annotation을 사용중이었다. 그런데 문뜩 c++에도 annotation을 쓰는가? 에 대한 궁금증이 번졌다. 그래서 검색해보았는데 이렇다 할 annotation이라는건 없었고 그 대신에 generalized attributes 라는 기능을 쓴다고 한다. 아래 스택오버플로우의 답변들을 보면 뭘 말하는지 알 수 있다. https://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/ C++11 generalized attributes Generalized attributes are a new C++11 core language feature that is..

C & C++/C++ 2022.01.03
반응형