전체 글 109

[중간 점검] 앞으로의 공부 계획

야놀자 테크스쿨이 7월 10일에 시작했고 현재 약 100일 가량 지났다. 지금까지 해왔던 공부들을 정리하고 앞으로 어떻게 공부할지 계획을 하고자 이 글을 쓴다. 1. 지금까지 했던 것 김영한 스프링 입문, 핵심원리 완강(Spring Framework에서 제공하는 기능에 대한 이해) 남궁성 스프링의 정석 완강 (Spring에 대한 기본적인 이해, CRUD 게시판 실습) 남궁성 자바의 정석 (자바 문법에 대한 이해) 스프링 입문을 위한 객체지향의 원리와 이해(자바와 스프링 기초, 디자인 패턴에 해서 학습) SQLD 시험 응시 (시험 준비를 너무 늦게 시작해서 합격할 수 있을지는 미지수지만, DB에 대해서 깊게 공부해봤음(반정규화, 서브쿼리 조인 등) 현재 진행 중인 공부 모던 자바 인 액션( 동작 파라미터화..

일기 2023.09.19

패스트캠퍼스X야놀자: 백엔드 개발 부트캠프 - 1차 토이 프로젝트 회고

1. 과제 개요 야놀자 테크스쿨에서 토이프로젝트를 진행했다. 1, 2, 3차로 총 세 번에 걸쳐서 진행되는 프로젝트이다. 프로젝트의 주제는 여행정보를 기록할 수 있는 서비스를 만드는 것이다. 1차 프로젝트는 순수 자바 언어만 사용하여 콘솔 프로그램을 만드는 것이다. 2차와 3차는 SpringBoot와 JPA를 사용할 수 있고, JWT등의 기술들을 사용해서 로그인 기능까지 구현하는 것이 요구조건이었다. 나는 3조에 배정받았고, 나 포함 5명이서 기능을 나눠서 구현했다. 깃으로 각각 담당하는 기능별 브랜치를 만들어서 작업했고, 마지막에 합치는 식으로 작업을 진행했다. 나는 여정을 조회하는 기능을 구현했다. 여행 기록, 여정 기록, 여행 조회, 여정 조회의 기능이 구현되어야 한다. 여정 정보 조회하기 기능 여..

[모던 자바 인 액션] 자바 8이 궁극적으로 추구하는 것.

자바와 스프링에 대한 공부를 하다보니 가장 중요한것은 결국 자바라는 언어를 자유자재로 다룰 줄 아는 능력이라는 것을 느끼게 되었다. 모던 자바 인 액션 책을 읽고 공부한 내용과 느낀 점을 기록하기 위해 포스팅 한다. 1. 자바 8에서 추구하는 것 모던 자바 인 액션에서 나오는 '자바8'에서 간결한 코드와 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항을 기반으로 한다. 시간이 흐르면서 대용량 데이터를 빠른 시간내에 처리할 수 있는 프로그래밍 언어가 필요했고, 자바로는 역부족이었기 때문에 자바 8에서는 여러가지 방법을 동원했다. 그 과정에서 자바 8이 선택한 내용이 바로 모던 자바 인 액션에서 다루고 있는 내용이다. 동작 파라미터화, 람다식, 스트림 등 여러 방식이 있다. 처음에는 모던 자바 인 액션..

패스트캠퍼스X야놀자: 백엔드 개발 부트캠프 - Java 2차 과제 회고

1. 과제 개요 1차 과제와 비슷하게 카카오 API에 GET요청을 보내고, 받아온 응답을 파싱해서 출력하는 부분으로 구성되어 있는데, 1차과제와 다른 점은 데이터베이스에 연동하여 저장하는 부분이 추가되었다. 2. 느낀점 1차 과제에서는 어떻게 기능별로 인터페이스를 분리해야 할지가 정말 어려워서, 전체적인 동작 분기별로 나눴던 것 같다. 1차 과제때는 객체지향이라고 하기 부끄러울만큼 허접스러운 설계를 했다면 2차과제에서는 멘토님이 알려주신 방법을 적용해보기 위해 노력했다. 행위 식별 -> 행위에 필요한 데이터 식별 -> 행위를 담당할 객체 식별 -> 클래스 작성 의 순서대로 프로그래밍을 해야한다고 조언을 해주셨다. 무작정 클래스 파일부터 만들고 키보드를 두드리던 나를 반성하게 됐다... 3. 개선해야 할 ..

[패스트캠퍼스] Spring 강의 수강 후기

본인은 지금 패스트캠퍼스 X 야놀자 테크스쿨 부트캠프를 수강중인 대학교 4학년 졸업반 학생이다. 수강신청을 할 때 내일배움카드를 신청하고 '나도 할 수 있는 Java&Spring 웹 개발 종합반'이라는 수업을 부트캠프 수업과 별개로 신청할 수 있었다. 국비지원 교육이기 때문에 당연히 무료이다. (자기부담금이 발생하지만, 추후 환급이 가능하다) 약 한달 조금 넘는 기간동안 커리큘럼이 진행되는 이 종합반 수업은 짧고 굵게 스프링에 대한 지식을 쌓을 수 있는 수업이기 때문에, 야놀자 테크스쿨 측에서 미리 스프링에 대한 경험이 없는 사람에게 프리코스 느낌으로 제공해준 것 같다. 강의 구성 이 종합반 강의의 총 구성은 이름에도 나와 있듯이 Java수업과 Spring 수업으로 나누어져 있다. 이 외에도 필수수강과 ..

패스트캠퍼스X야놀자: 백엔드 개발 부트캠프 - Java 1차 과제 회고

1. 과제 개요 TOPIC은 위치기반 장소 검색 Java 애플리케이션 개발이다. 카카오 지도 검색 API를 사용해서 사용자가 입력한 키워드 근처의 주유소나 약국을 찾아주는 시스템이다. 그리고 이런 과제를 처음 해보는데, 깃허브에 개인 브랜치를 따서, 커밋과 푸쉬를 한 뒤, Pull request를 보내는 방법으로 제출을 하는 방식이었다. 처음에는 낯설었지만, 과제를 하면서 버전관리를 동시에 할 수 있었고, git을 사용해서 기능별로 브랜치를 나누어 개발하니 더 효율적이었다. 2. 느낀점 이번 과제의 핵심은 Http 프로토콜을 사용해서 카카오 서버에 GET 요청을 보내고 그 응답을 받아오는것, 그리고 서버의 응답이 Json 형식인데 Json 포맷의 데이터를 자바에서 사용하는 객체로 변환하고, 파싱하는것 이..

[SpringBoot] BindException 해결법

BindException 가끔 톰캣 서버를 실행해도 실행이 되지 않으면서 BindException이라는 에러 메시지가 뜨는 경우가 있다. 이 경우 1099포트가 이미 사용중이라는 메시지가 함께 표시되는데, 톰캣 웹서버 실행에 필요한 JMX 포트가 1099인 것으로 미루어보아, 톰캣이 1099 포트에서 프로세스가 정상적으로 종료되지 않은 것 같아서 재실행할때, 1099포트가 이미 사용중이라는 메시지가 뜨는 것 같다. 해결법 구글링을 해 본 결과 터미널에서 1099포트의 프로세스를 강제로 kill 해주면 된다고 한다. sudo lsof -i : 위 명령어로 해당 포트 번호로 사용중인 프로세스를 확인할 수 있다. kill -9 그리고 위 명령어로 해당 프로세스를 kill 할 수 있다. 14636이라는 PID로..

Spring 2023.08.26

MySQL 테이블 생성 및 스프링 db 연동

1. MySQL 워크벤치를 사용하여 스키마 및 테이블 생성 MySQL 워크벤치에 접속해서, 루트 계정으로 접속한다음 Library라는 스키마를 만들고 고객 테이블을 생성해준다. 그리고 Spring과 연동할 커넥션에서 이 스키마를 기본 스키마로 사용하면 된다. 테이블을 만들 때 요구사항에 보면 고객번호는 100000번에서 1씩 증가해야 하므로, 자동증가에 체크를 반드시 해주어야 한다. 그리고 중요한게 스프링과 연결할 계정이 루트 계정이 아니라면 방금 만든 테이블에 대한 권한을 모두 줘야한다. 그렇지 않으면 커넥션이 불가능하다. 만든 Library에 대한 모든 권한을 chadongmin 계정에 주었다면, 새로운 커넥션을 만들 수 있다. 즉 chadongmin 계정으로 방금 만든 Library 스키마를 기본 ..

Spring 2023.08.24

[도커] 컨테이너를 재시작하면 MySql 테이블이 사라지는 오류

1. 도커를 재시작했더니 MySql 테이블이 사라졌다. 남궁성의 스프링의 정석을 들으면서 게시판 CRUD를 구현하는 연습을 하고 있었다. 처음에 DB를 연결할 때, 로컬에 MySql을 설치해서 jdbc 드라이버로 연결하는 방식으로 강의에는 나와 있었다. 하지만 나는 이 참에 '도커'라는 것을 한번 써보고 싶어져서 도커라는 놈을 설치하고 그 위에 이미지를 설치하고 어찌 저찌해서 MySql을 설치하고 사용중이었다. 나는 맥북을 사용중인데, 노트북 특성 상 화면을 닫기만 하면 자동으로 잠자기 모드에 들어가니 전원을 끌 일이 잘 없었다. 그런데 어제 갑자기 컴퓨터를 재부팅하고 도커를 run했는데, 테스트 케이스들이 줄줄이 에러가 나는 대참사가 발생했다. 원인은 가만히 있던 db의 테이블이 사라져있었다. 이 놈의..

DevOps 2023.08.17

[실시간 위치인식 시스템] 시각화 소스코드 문제점 개선(의존관계 주입, 싱글톤 패턴 적용)

기존 시각화 소스코드의 문제점 - 관심사의 분리 X, 필드 값 외부 주입 필요 자바에서는 객체지향의 원칙을 지키며 프로그래밍 하는 것이 아주 중요합니다. 기존의 소스코드는 관심사의 분리가 되어 있지 않고 하나의 public 클래스에 내부 클래스로 모든 기능이 구현되어 있었습니다. 그리고 가장 심각한 문제는 태그의 좌표가 하드코딩 되어 있다는 것입니다. 이를 외부에서 주입해서 소스코드를 수정하지 않고도 앵커의 좌표값을 세팅할 수 있어야 합니다. 이 프로그램에서 태그의 좌표는 SWING을 사용하여 화면에 앵커의 위치를 그릴 때 1번, Trilateraion할 때 1번, 총 2번에 걸쳐서 태그의 좌표가 사용됩니다. 이 두 부분이 모두 하드코딩 되어 있었고, Anchor의 클래스가 따로 분리 되어 있지 않아서 ..

위치인식 연구 2023.08.11