최신 글
-
블로그 이사 중입니다.
안녕하세요, 코드 스테이츠 부트캠프가 내일로써 끝나는데 6개월간 열심히 달린 것 같습니다. 그래도 아직 부족한 점이 너무 많아서 현자 타임이 좀 왔네요.. ㅎㅎ 본론으로 들어가서 최근 카카오 관련 이슈 덕에 블로그 접속이 한동안 불가능했는데요, 지금도 접속 시 모바일 환경으로 강제 리다이렉트가 되고 있어서 많은 불편함이 있는 것 같습니다. 이런저런 고민을 해 보던 중 그동안 해보고 싶었지만 못했던 깃허브 블로그를 새로 시작해보게 되었습니다. 사실 부트캠프 시작하기 전에 해보려 했지만 그때는 뭐가 뭔지 몰랐는데 지금은 그래도 여기저기 찾아서 하는 걸 보면 어떻게든 그때보단 성장한 게 아닌가 싶습니다. 그때는 깃이 뭔지도 몰랐으니까요. https://daihan-ch22.github.io/ 포스팅 전체를 그..
-
재미있었던 외부 API 도입 feat. Kakao API
해당 글은 코드 스테이츠 개인 기술 회고를 하면서 작성함 위치 서비스를 구현해야 하는 만큼 사용자의 위치 정보를 얻어야 하는 점이 이번 프로젝트의 critical task 중 하나였습니다. 처음 위치정보를 어떤 식으로 받아와야 하는 것에 대해 막연하게 “그거 그냥 카카오나 네이버 지도 api” 쓰면 될 것 같은데라고 생각하였지만 “어떻게?”라는 관점에서 보니정말 막막하였습니다. 1. 사용자 IP로 위치정보 받아오기 처음에는 IP로 확인을 하면 되지 않을까 해서 찾아본 결과, MaxMind회사의 GeoLite2라는 api를 사용하면 도시정보를 받아볼 수 있다는 걸 알게 되어 바로 도입을 해보았습니다. GeoLite2는 큰 그림에서 봤을 때 접속자의 IP를 토대로 GeoLite2 DB상에 저장된 도시정보를 ..
-
Pre-Project 돌아보기
약 2주간의 pre-project가 끝이 나고 바로 main-project 기간이 시작되었다. 본격적으로 메인 프로젝트를 시작하기 전에 프리 프로젝트를 진행하면서 느꼈던 점들을 한번 정리해보려고 한다. 우선 프리 프로젝트를 같이 무사히 넘길 수 있게 열심히 해주시고 부족한 팀장을 잘 믿고 따라와 주신 44조 팀원분들에게 무수한 감사를 드리고 싶다. 팀원 개개인의 실력차가 그렇게 나지 않았고 각자 실력 부분에서 부족한 부분이 많다는 공통된 생각을 처음에 공유했었다. 하지만 프리 프로젝트가 끝나고 나서 드는 생각은 비록 100% 완성을 이루진 못하였지만 열정, 의욕, 팀워크 부분에서는 정말 최고였다. 다만 각자 열심히 했었기에 남는 아쉬움 또한 매우 많았다. 팀 단위의 정리 팀끼리 정리해본 전체적인 측면에서..
-
[pre-project] React에서 Bearer 토큰을 헤더로 받아오기
Bearer 토큰을 사용해서 시큐리티를 적용시켰는데 postman을 통해서는 토큰을 잘 받아왔지만 리액트 쪽에서 받아오지 못하는 이슈가 있었다. 크롬 개발자 도구에서 보면 이상하게 Authorization이 보이질 않았다. 하지만 포스트맨에서는 아무 문제없이 Authorization부분을 헤더에서 확인할 수 있었다. 이를 미루어볼때, 토큰 자체가 생성되지 않는 이유는 아닌 것 같았다. 프론트엔드 측에서 별다른 해결책이 보이지 않아서 백엔드 측에서 문제가 있는게 아닐까 하고 검색을 해본 결과 서버측에서 시도할만한 방법은 바로 addExposedHeader라는 녀석을 추가하는 것. 우리는 cors를 webconfig에서 시큐리티 필터 체인에다가 corsFilter를 사용하는 방식으로 변경했기에 해당 코드를 ..
-
[pre-project] RDS연동 후 프로그램 실행 시 프리징
ddl 옵션 create로 해놨는데 실행 때마다 alter table answer에서 멈추는 것 같았다. answer 엔티티 클래스에서 외래 키들의 입력이 들어오지 않아 나는 에러 같아서 @NoArgsConstructor를 붙여주니 그 뒤로는 잘 되었다. 근데 @Entity가 있으면 자동으로 noargs생성자가 된다는데.. 뭐지 ---수정 위에 것도 문제긴 했었지만 그게 먹통 현상의 근본적인 문제가 아니었다. 상단에 첨부한 사진에는 Deadlock 관련 이슈가 있었는데 이것은 pool 사이즈를 늘려보래서 늘려봤지만 같은 문제가 발생했다. DB Navigator로 확인한 모습인데 저 에러는 아래에서 설명할 에러때문에 일어나는 일 같다. 결론부터 말하면 가장 큰 이유는 바로 엔티티 안의 외래 키 때문이었는데..
-
3 SEPT pre-project Week2
이번 주도 순식간에 지나갔다. 부트캠프 시작하고 나서 아마 제일 시간이 빨리 지나간 주였던 것 같다. 그만큼 정신없었고 내가 뭘 하는지 모를 만큼 열심히 했던 것 같아서 후회는 없을 것 같다. 일단 프로젝트에 대해 백엔드 부분은 같은 백엔드 팀원분께서 굉장히 많은 것을 해주셔서 버스를 타게 되었다. 실력또한 좋으셔서 많이 배우고 있다. 처음에 우리가 정했었던 필수 기능 CRUD와 답변, 댓글 기능까지 어느 정도 구현이 된 것 같고 나는 좋아요 부분을 구현해보려 했으나 생각보다 많이 어려웠다. 그래도 일단은.. 좋아요와 좋아요 취소 그리고 싫어요와 싫어요 취소를 나름 구현은 해봤는데 로직이 뭔가 틀린것 같다 ㅋㅋㅋ 팀장으로서 나는 팀원들이 쾌적하게 개발할 수 있는 환경을 만들어 놓자라고 생각했어서 개인 a..
-
[EC2] Nginx를 이용한 React 배포
Pre-Project 도중 Vercel 같은 배포 툴을 사용해서 프론트단을 배포하려 했으나 도메인을 강제로 https로 변경시키는 바람에 다른 방식으로 배포를 할지, 스프링에 https를 적용할지 고민이 되었다. 처음에는 certbot을 통해서 https를 적용해보려 했으나 Vercel 같은 경우에는 배포를 자동으로 해주면서 도메인도 https로 생성을 해버리기 때문에 certbot에서 https를 적용할 수 없었다. (http도메인에 https를 적용하는 방식인 듯) 그리고 이 방식은 잘 이해가 되지 않았다. 그래서 React배포 시 자주 사용된다는 Nginx를 사용해서 React 프로젝트를 배포하기로 했다. 아쉽지만 이번에는 http로 진행하기로 정했다. 아래의 블로그가 큰 도움이 되었다. Nginx..
-
[pre-project] React 에서 Spring Boot 서버로 접속 불가 - CORS
Pre-Project도중 FE에서 BE 서버로 접속이 가능한지 확인하기 위해 굴러다니는 아무 프로젝트를 IntelliJ를 통해 돌리고, 내 아이피 주소:8080으로 접속이 가능한지 테스트를 해보았다. FE 측에서 CORS에러가 떠서 접속이 안된다고 하셔서 React에서 proxy를 8080으로 줘 보는 등 이런저런 시도를 해보았지만 잘 되지 않았다. 계속 찾아보던 도중 BE측에서 CORS 설정을 할 수 있다는 것을 찾게 되고 적용을 해봤더니 그 이후로는 통신이 잘 되었다. [해결방법] - global하게 적용 1. src/main/java/{프로젝트폴더}에 config 디렉토리를 만든다. 2. config안에 WebConfig클래스를 만들고 @Configuration과 WebMvcConfigurer를 구..
-
26 AUG pre-project Week1
드디어 첫 프리 프로젝트가 시작된 지 1주일이 지났다. 프리 프로젝트에서는 stackoverflow 웹 사이트를 클론 코딩 비슷하게 만들어 보게 될 예정이다. 팀이 배정이 되기 전에 엄청 떨렸었는데.. 다행히 좋은 팀원분들을 만난 것 같다. 다들 정말 열심히 해주셔서 나도 더욱 열심히 해야겠다는 생각이 들었다. 어쩌다가 팀장을 맡게 되었는데, 개발에 대한 지식이 아직 많지 않아 내가 잘 이끌 수 있을까, 못하는데 잘할 수 있을까 하는 고민이 계속되었고 지금도 계속되고 있다. 하지만 이미 엎질러진 물, 민폐가 되지 않도록 열심히 해야겠지.. 개인적으로 현재 팀장으로서의 내 역할은 물론 개발이 잘 되게 조율하는 게 제일 중요하겠지만 못하거나 결과가 잘 나오지 않아도 괜찮으니 같이 포기하지 말고 즐겁게 최선을..
-
section4 기술면접 정리했던것(필터,CI/CD)
필터 - 말 그대로 들어오는 HTTP 요청을 필터링하여 서블릿에 전달한다. - 클라이언트와 DispatcherServlet 사이에 필터가 존재함 - 필터는 여러 개 존재 가능하며 이를 연결한 것이 필터 체인이다. - 필터 체인에서 필터는 다운스트림 형식으로 적용되기 때문에 필터의 위치 순서가 매우 중요함. 시큐리티에서 필터 - 스프링 시큐리티에서는 "DelegatingFilterProxy"를 상속받은 "FilterChainProxy"라는 필터를 만들어 사용 - 이는 일반적인 서블릿 컨테이너는 스프링 컨테이너(ApplicationContext)의 빈을 사용할 수 없기 때문에 스프링 컨테이너와 서블릿 컨테이너를 연결하는 역할 - "FilterChainProxy"를 통해 "Security Filter"를 만들..