경제학과, 유학동양학과를 전공하고 이커머스 회사에서 백엔드 개발자로 일하고 있습니다.
백엔드 부트캠프에서 도메인 특강 및 프로젝트 코칭을 6회 진행했습니다.
유튜브 라이브로 백엔드 개발자 취업 특강을 진행했습니다.
강의
게시글
질문&답변
Admin 뷰 템플릿 유료화 여부 및 변경 사항 문의드립니다.
안녕하세요 정보근입니다:) 말씀주신대로 최근 업데이트로 라이센스 변경이 발생한 것 같고요.라이센스 정책이 바뀔 것이라고는 예상하지 못했습니다.다른 템플릿을 이용하거나 자체 템플릿을 제작해 강의를 재촬영 해야 할 것 같습니다.불편을 드려 죄송합니다. 우선 본 강의의 목표는 백엔드 개발인만큼,[실습] 뷰 개발 - 부트스트랩 템플릿 ~ [실습] 스프링 시큐리티 로그인 개발까지는 건너뛰어도학습 목표 달성에 지장은 없을 것으로 생각됩니다.데이터 삽입, 변경, 삭제가 필요할 경우 포스트맨 등을 이용해 API를 직접 호출하거나,디비버, 데이터그립 등의 툴을 이용하시면 좋을 것 같습니다. 워밍업 클럽 러너 분이시라면,인프런 담당자 분과 논의 후 디스코드로 향후 방향 전달드리겠습니다. 다시 한 번 불편을 드려 죄송합니다. 감사합니다.
- 0
- 2
- 93
질문&답변
테스트 코드 작성 중 AssertionError 발생
안녕하세요 정보근입니다:) 올려주신 이미지를 보면 테스트는 정상 실행이 됐고,테스트 결과를 검증하는 부분에서 오류가 발생했네요. findAll() 테스트 코드와 로그를 순서대로 보시면,먼저 experienceRepository.findAll()로 Experience 엔티티를 조회하는 쿼리가 실행되고,Experience 개수는 2개로 로깅이 됐습니다.그리고 그 바로 아래 쿼리는 experience.details를 호출하는 시점에 실행되는데요.그러나 details 리스트가 비어있어서 크기는 0이고,첫번째 테스트 데이터 세팅 과정에서 설정해준 exprience의 details 크기(=title)와 달라서Assertions에서 검증에 실패했습니다. 예상되는 원인 중 가장 가능성 높은 것은Experience 엔티티와 ExperienceDetail 엔티티의 CascadeType 설정입니다.Experience 엔티티의 @OneToMany 어노테이션에cascade = [CascadeType.ALL]로 속성이 지정되었는지 확인해주세요.이와 관련한 내용은 "[실습] 엔티티 개발 - 연관관계 있음"의 수업 노트에 보충 설명되어 있습니다. 혹시 이 방법으로 문제 해결이 안 된다면리포지토리 주소를 같이 올려주시면 원인 확인에 도움이 될 것 같습니다. 감사합니다.
- 0
- 4
- 83
질문&답변
메모리 크기
안녕하세요 정보근입니다:) 굉장히 좋은 질문 해주셨네요.질문주신대로 실습 프로젝트 애플리케이션 + MySQL만 해도1GB 메모리의 인스턴스에서 실행하기에는 무리가 있습니다. 다만 강의 수강 대상이 대학생~취업준비생이고,한 번 만들고 끝이 아닌 계속 운영하는 프로젝트로 기획한만큼,과금되는 인스턴스를 사용하는 것은 부담이 될 것이라 생각했어요.그래서 프리티어를 선택을 했습니다. 아마 GCP CE 인스턴스 만들기 강의 직후 질문을 남겨주신 것 같은데요.다음 강의를 들으시면 아시겠지만, 메모리 부족 문제를 해결하기 위해 Swap 메모리를 이용했습니다. 속도가 좀 느릴 수는 있지만 이 편이 수강생분들 부담이 적을 것이라고 생각했습니다.만약 금전적 여유가 있으시다면 상위 인스턴스를 선택해도 무방합니다. 정리하면 말씀하신대로 프리티어만으로는 메모리가 부족한 게 맞지만,강의 수강 대상을 고려해 SWAP 메모리를 사용하는 쪽으로 타협을 했습니다. 감사합니다.
- 0
- 2
- 46
질문&답변
클래스 생성 강의 수강 중 오류 발생
안녕하세요 정보근입니다:) id가 사용되지 않았다는 문구는 오류라기보단인텔리제이에서 프로젝트 분석 후 알려주는 경고입니다. 강의를 계속 따라하시면서 진행하시면 사라질 것이고,(가끔 분석 오류인지 사용하고 있는데도 계속 뜨는 경우도 있습니다)프로젝트 빌드 및 실행이 정상 된다면 무시하셔도 좋습니다. 만약 신경 쓰이신다면 설정 > inspection이라 검색하신 후불필요한 검사는 비활성화 할 수 있습니다. 감사합니다.
- 0
- 1
- 56
질문&답변
리액트 연결
안녕하세요 정보근입니다:) 리액트, 뷰 등을 사용할 경우에는 두 개의 서버를 실행해야 합니다.하나는 리액트로 만든 자바스크립트 소스를 전달할 웹 서버,다른 하나는 스프링이 실행되는 웹 애플리케이션 서버(이하 WAS)입니다. 사용자가 접속하는 서버는 웹 서버고,웹 서버는 리액트로 만든 자바스크립트 파일과 빈 HTML 파일 등을 클라이언트에 응답합니다.그럼 클라이언트에서는 리액트를 실행할 수 있을 것이고요. 제가 리액트 경험은 없지만 뷰 경험에 비춰 말씀드려보자면,각 화면을 구성할 때 특정 URL을 호출해서 데이터를 받아온 뒤그 데이터를 이용해 화면을 그릴 수 있도록 되어 있을 거에요.이 때 호출하는 URL이 WAS의 각 API가 되어야 합니다.화면이나 컴포넌트 단위로 필요한 데이터를 조회하기 위해 API를 호출하면,스프링에서 데이터를 조회한 뒤 데이터만 내려줄 것이고요.그럼 클라이언트의 리액트는 데이터를 이용해 화면을 갱신합니다. CSR은 기본적으로 이런 구조라 할 수 있어요.정리하자면 클라이언트는 웹 서버에서 자바스크립트 애플리케이션을 받아오고,이후 각 화면을 조회할 때는 자바스크립트 애플리케이션에서 WAS의 API를 호출해 데이터를 받아오고,받아온 데이터를 이용해 새로 화면을 그립니다. 반면 SSR 방식은 URL을 호출하면,데이터를 조회한 뒤 HTML 템플릿과 결합해 최종적인 HTML 파일을 내려준다는 차이가 있습니다. CSR, SSR, Single Page Application이란 키워드로 더 검색해보셔도 도움이 될 겁니다. 참고로 강의의 데모 프로젝트는 SSR 방식을 사용해 동작하지만,이후 리액트, 뷰 등을 사용해보고 싶은 분들을 위해 API 개발도 포함되어 있습니다. 감사합니다.
- 0
- 2
- 74
질문&답변
Docker Compose 배포 시 Jasypt 암호화된 속성 복호화 문제 해결 방법
안녕하세요 정보근입니다:) 질문이 아닌 정보 공유성으로 글 올려주셨군요. 좋은 내용으로 글 작성해주셔서 감사드리고, 이후 강의 업데이트에 관련 내용도 반영해 보겠습니다. 다만 제가 데모 프로젝트를 작업할 때는 @EnableEncryptableProperties 어노테이션을 추가하지 않아도 정상 동작이 됐는데, 왜 어노테이션 없이 암복호화가 잘 동작하지 않았는지 궁금해서 확인을 좀 해봤습니다. 올려주신 깃허브 리포지토리를 보면 build.gradle.kts 파일에서com.github.ulisesbocchio:jasypt-spring-boot:3.0.5를 의존하고 있더라고요.데모 프로젝트에서는 com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5를 사용했습니다. 두 라이브러리의 차이를 확인하기 위해 소스를 찾아보니 spring-boot-start에는 AutoConfiguration 클래스가 추가되어 있더라고요.@EnableEncryptableProperties 어노테이션을 열어보면 EnableEncryptablePropertiesConfiguration.class를 Import 하는데요.아래 링크를 보시면 똑같은 기능을 하는 클래스가 있는 것을 확인하실 수 잇습니다. https://github.com/ulisesbocchio/jasypt-spring-boot/tree/master/jasypt-spring-boot-starter/src/main/java/com/ulisesbocchio/jasyptspringbootstarter 그래서 spring-boot-starter를 사용하면 별도의 활성화 없이 자동으로 암복호화가 활성화 되는 것이었네요. 좋은 내용 공유해주셔서 다시 한 번 감사드립니다!
- 1
- 2
- 108
질문&답변
도커로 크롬에서 프로그램 열기
안녕하세요 정보근입니다:) 올려주신 로그를 보면 Communications link failure라는 메시지가 확인되는데요.MySQL에 연결하려고 했으나 정상적으로 커넥션이 성립되지 않은 것으로 보입니다.추정 가능한 원인은 여러가지가 있는데, 몇가지 말씀드릴테니 확인해주세요. application-docker.yml에서 mysql URL에 오타가 없는지 확인한다.MySQL 도커 컨테이너가 실행 중인지 확인한다.docker-compose.yml 파일에서 컨테이너의 포트 정보를 3306:3306으로 세팅했는지 확인한다.docker-compose의 컨테이너 이름과 application-docker의 URL 정보가 맞는지 확인한다. 예를 들어 컨테이너 이름이 "mydb"라면 url은 jdbc:mysql://mydb:3306과 같이 되어야 한다. 이 정도 사항을 확인해보시면 될 것 같습니다.참고로 올려주신 깃허브 소스의 application-docker를 보니 3307 포트로 지정해두셨는데요.이 경우 docker-compose.yml에서는 3307:3306으로 설정해야 연결이 될 겁니다.혹은 application-docker의 mysql 정보를 3306 포트로 변경하거나요. 간단히 설명하자면 로컬 컴퓨터의 포트와 도커 컨테이너의 포트를 연결해주는 설정입니다.컨테이너 내부에서는 3306 포트에서 mysql이 실행되고 있는데,이 컨테이너의 3306 포트를 로컬호스트의 3307 포트와 연결해줘야사용중인 컴퓨터에서 3307 포트를 통해 도커 컨테이너의 3306 포트로 접속할 수 있습니다. 감사합니다.
- 0
- 2
- 152
질문&답변
DBeaver 연결부터 도커로프로젝트 빌드까지 안됩니다.
안녕하세요 정보근입니다:) 문제 상황을 정리하면도커로 MySQL 컨테이너 실행 -> 3306 포트 사용 중으로 실행 불가3307 포트로 컨테이너 실행 -> 성공프로젝트 도커 컨테이너 실행(3307 연결) -> 비밀번호 불일치로 연결 불가디비버에서 MySQL 컨테이너 접속이 안 됨 -> 다음 강의로 넘김프로젝트 도커 이미지 필드 후 컨테이너 실행 -> 데이터가 안 보임수정하다보니 프로젝트도 접속이 안 됨대략 이런 상황이신 것 같은데요. 우선 제가 리포지토리의 docker-compose.yml 파일을 받아서3307 포트로 접속해보니 연결은 정상적으로 되네요.왜 접속이 안 됐는지부터 확인이 필요하실 것 같아요. 그리고 MySQL 접속이 안 됐다면 테이블 생성 작업도 못하셨 것 같은데,docker 환경에서는 spring.jpa.hibernate.ddl-auto를 none으로 설정해서직접 MySQL에 쿼리를 날려 테이블을 생성해줘야 합니다. 사실 전체적으로 상황이 막연해서 명확한 답변을 드리기 어렵습니다.문제를 해결하는 최초의 접근은 에러 로그를 확인하는 것입니다.에러 로그를 보고 어떤 이유에서 문제가 발생하는지 확인해보시고,해결법을 모르겠다면 로그를 같이 남겨주셔야 좀 더 구체적인 도움 드릴 수 있을 것 같습니다. 감사합니다.
- 0
- 2
- 195
질문&답변
뷰 개발 파일 없음
안녕하세요 정보근입니다:) 부트스트랩 템플릿 문서를 보니 9월에 업데이트가 있었네요.업데이트 되면서 quill.min.js 파일이 사라진 것으로 보입니다.quill.js로 파일명만 바꿔주셔도 될 것 같아요. 감사합니다.
- 0
- 2
- 92
질문&답변
fragment 분리 에러
안녕하세요 정보근입니다:) 위의 로그를 보면 admin/page-table 템플릿을 못 찾는다고 나오는데요.아래 html 파일명은 page_table로 되어 있네요.경로 및 파일명 맞춰주면 템플릿 찾을 수 있을 것으로 보입니다. 감사합니다.
- 0
- 1
- 83