seungjjun의 등록된 링크

 seungjjun로 등록된 티스토리 포스트 수는 224건입니다.

TCP와 UDP의 특징 (3-way-handshaking, 4-way-handshaking) [내부링크]

TCP와 UDP는 OSI 7계층의 전송계층에서 사용되는 프로토콜이다. 전송계층을 간단히 설명하면 송신자와 수신자를 연결해 데이터의 전달을 담당하는 계층이라고 생각하면 된다. 먼저 TCP부터 알아보자. TCP(Trasmission Control Protocol) TCP는 연결 지향적 프로토콜이며, 손실되면 안되는 중요한 데이터(웹, 이메일, 파일 등등)를 주고받을 때 통신의 신뢰성을 높이기 위해 사용한다. 연결 지향 프로토콜이란 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미한다. 데이터를 전송하기 위해서는 클라이언트와 서버가 연결이 되어야 하는데 클라이언트와 서버 간에 연결을 하기 위해서 3-way-handshaking 과정을 통해 연결이 되고, 데이터 전송이 끝나면 4-way-ha..

HTTPS란 무엇인가? [내부링크]

HTTPS에 대해 간단히 알아보자. 우선 HTTPS를 알기 위해선 HTTP에 대한 기본적인 지식이 필요하다. 얼마 전에 HTTP에 대해 간단히 설명한 글이다. https://seungjjun.tistory.com/223 HTTP란? 웹을 배우지 않아도 인터넷을 한번이라도 사용했다면 주소창에서 볼 수 있는 HTTP에 대해서 간단히 정리해보려고 한다. HTTP란??? 우선 HTTP의 정의부터 알아보자. HTTP는 Hyper Text Trasnsfer Protocol의 약 seungjjun.tistory.com HTTPS란? HTTPS(Hypertext Transfer Protocol Secure)를 간단하게 정의하면 HTTP 프로토콜의 보안이 강화된 버전이라고 할 수 있다. HTTPS는 소켓 통신에서 일반 ..

프로세스란? (PCB, Context Switching) [내부링크]

프로세스(Process) 프로세스를 간단히 표현하면 실행중인 프로그램이라고 표현할 수 있다. 구체적으로 메모리 상에서 실행 중인 프로그램으로 운영체제로부터 자원(주소 공간, 파일, 메모리)을 할당 받을 수 있는 것을 말한다. 모든 프로세스는 실행을 위해서 CPU를 필요로 하는데, CPU의 자원은 한정되어 있기 때문에 프로세스가 CPU를 동시에 사용할 수 없다. 즉, 프로세스들은 실행을 위해 각자 자신의 차례를 기다리며 할당받은 시간만큼만 CPU를 이용한다. OS는 이렇게 프로세스의 실행을 관리하기 위해 프로세스 제어 블록(PCB)이란것을 이용한다. 프로세스 제어 블록(Process Control Block, PCB) 프로세스 제어 블록(PCB)이란 프로세스에 대한 중요한 정보들을 저장하고 있는 자료구조이..

가비지 컬렉션(Garbage Collection)이란? [내부링크]

가비지 컬렉션(Garbage Collection, GC) C/C++과 달리 자바는 개발자가 명시적으로 객체를 해체할 필요가 없다. 이는 자바의 장점 중 하나이다. 사용하지 않는 객체를 메모리에서 삭제하는 작업을 GC라고 부른다. 가비지 컬렉션은 동적으로 할당된 메모리 영역 중 사용하지 않는 영역(쓰레기)를 찾아 지우는 역할을 한다. GC에 대해 자세히 알기 전에 'stop-the-world'를 먼저 살펴보자. stop-the-world? GC를 실행하기 위해 JVM은 애플리케이션 실행을 멈추게 하는데 이를 'stop-the-world(STW)'라고 한다. 모든 GC는 STW를 발생시키는데 STW가 발생하면 GC를 실행하는 Thread를 제외하고 모든 Thread는 작업을 멈춘다. GC 작업이 완료되어야 ..

JVM(Java Virtual Machine)이란? [내부링크]

JVM이란? JVM(Java Virtual Machine)은 자바를 실행하기 위한 가상 기계로 Java의 특징 중 하나인 OS에 종속받지 않고 사용할 수 있는 특징을 가능하게 해주는 도구이다. JVM이 Java와 OS사이에서 중개자 역할을 수행하기 때문에 Java가 OS에 종속받지 않고 사용을 가능하게 해준다. 그리고 메모리 관리(Garbage Collection)도 수행한다. JVM 구성 요소 Class Loader Class Loader는 클래스 파일(.class file)을 JVM이 OS로 부터 할당받은 메모리 영역(Runtime Data Area)으로 로딩하는 역할을 한다. Execution Engine 클래스 로더가 메모리(Runtime Data Area)에 클래스 파일들을 적재시켰다면 실행 엔..

HTTP란? [내부링크]

웹을 배우지 않아도 인터넷을 한번이라도 사용했다면 주소창에서 볼 수 있는 HTTP에 대해서 간단히 정리해보려고 한다. HTTP란??? 우선 HTTP의 정의부터 알아보자. HTTP는 Hyper Text Trasnsfer Protocol의 약자로 웹에서 리소스(데이터)를 주고 받을 수 있는 프로토콜이다. 프로토콜은 "약속"을 의미한다. 조금 더 와닿게 설명하면 HTTP는 웹에서 서버와 클라이언트간에 리소스를 주고 받기 위한 약속을 말한다. 그러면 웹에서 리소스를 주고 받기 위해 약속을 정한 이유는 무엇일까? 약속을 정하지 않고 서로 다른 하드웨어와 운영체제, 무엇 하나 같은게 없는 컴퓨터끼리 웹에서 통신을 한다고 한번 상상해보자. 그러면 서로 통신을 하기 위해 자신만의 방법으로 데이터를 요청하고 보내려고 할..

2022년을 보내며 [내부링크]

2022년 나의 발자취를 되돌아보았다. 1. 시작 2022년은 치열했고 지금까지 가장 의미 있게 보냈다고 자부할 수 있는 한 해였다. 어렸을 때부터 조립하면서 뭔가를 만들어 동작시키는 것을 좋아해 로봇공학자가 꿈이었었는데 대학 입시에 실패하면서 자연스럽게 꿈을 접었었다. 그러다 군대에서 우연히 누군가 코딩하는 것을 보게 되었고 단순히 그 모습이 멋있어 보였던 나는 코딩에 대해 알아보기 시작했고 전역 이후에 유튜브에 있는 여러 코딩 강의를 따라 해 봤는데, 재미있었다. 본격적으로 배우고 싶다는 생각이 들었고 마침 학교에서 비전공자를 대상으로 프로그래밍을 교육해주는 동아리가 있다는 것을 알게 되었고, 나의 2022년 첫 목표가 정해졌다. '멋쟁이 사자처럼' 동아리에 들어가는 것이었다. 코딩이 한창 열풍이다 ..

KiCK OFF 프로젝트 회고 [내부링크]

1. KiCK OFF 배포 링크 : http://kick-off.tech 시연 영상 편집이 허접하지만 이런 기능들이 있다 이정도로만 봐주세요. 어드민 시연 영상 1-1) 프로젝트 소개 및 선정이유 "KiCK OFF"라는 프로젝트는 축구를 즐겨보는 사람들이 서로 축구 관련 정보를 공유하고 해외 축구 경기 일정이나 경기 정보들을 얻을 수 있으며 실시간으로 사용자끼리 응원할 수 있는 서비스를 제공하는 커뮤니티 프로젝트이다. 이 프로젝트를 선정하게 된 이유는 매우 심플하다. 프로젝트 아이디어 선정 당시 어떤 도메인으로 프로젝트를 진행할지 생각하는 시간이 있었는데 나는 한 치의 고민도 없이 "축구"를 선택하였다. 내가 제일 잘 알고 가장 좋아하는 영역이었기 때문이다. 그런데 도메인을 빠르게 정한 것 치고는 축구라..

221222 TIL Bucket4J를 이용해 외부 api 관리 [내부링크]

KiCK OFF 프로젝트에서 축구 경기 일정을 조회하기 위해 무료(인줄 알았던..) api인 rapid api를 사용하고 있었다. 그런데 11월 말 코딩을 하던 중 핸드포네서 "띠링" 소리가 울렸다. 확인해보니 카드 결제소리 였다.. 자동이체 해놓은게 없는데 돈이 빠져나가 확인해보니 RAPIDAPI 에서 자동으로 6,770원을 뺏어(?)갔다.. 부리나케 rapid api 사이트에 가서 pricing 부분을 다시 확인해보니 하루에 100번 요청까지만 무료고 다음 요청부터는 0.005달러씩 추가 요금이 발생한다고 적혀있었다. 뭐 아무튼 6,770원만 빠져나간걸 감사하게 생각하고 급한대로 경기 요청 api는 우선 사용하지 못하도록 막아놨었다. 해당 api를 사용하는 부분은 모두 구현을 했기 때문에 배포 전까지..

221210 TIL 클릭 효과 유지 하기 [내부링크]

오늘은 어드민 페이지 css 작업을 끝냈다. 그중 게시판을 관리하는 페이지의 css를 적용할 때 시간이 꽤나 걸렸었는데 그 이유가 메뉴를 클릭했을 때 클릭한 메뉴의 글씨 색이 변한 상태로 유지되도록 css를 적용하고 싶었기 때문이다. 메뉴를 클릭했을 때 글씨 색을 변하게 하는 속성 중 active 속성이 있었는데 active속성을 적용하면 메뉴를 클릭했을 때 그 순간에만 메뉴 색이 변경이 되어서 내가 구현하고 싶은 기능과는 달랐다. 위 css를 적용하기 위해 처음에 이용했던 방법은 useState를 이용해 isSelected를 만들어서 초기값은 false로 주고 메뉴를 클릭하면 onClick함수에 setIsSelected를 true로 바꿔 isSelected가 true이면 해당 태그의 색을 변경하는 식으..

221209 TIL 채팅 입력시 자동으로 scroll 맨 밑으로 이동하게 하기 [내부링크]

오늘은 채팅창 css를 적용하다 수정해야 할 부분이 생겨서 다시 채팅창을 리팩터링 하는 작업을 했다. 문제 상황은 채팅 메시지가 채팅창의 세로 사이즈가 넘어갈 시 overflow-y: auto를 줘서 자동으로 세로 스크롤이 생기게 했다. 그런데 채팅을 새로 입력했을때 세로 스크롤만 생기지 스크롤이 자동으로 맨 밑으로 내려가는 게 아니라 사용자가 직접 스크롤을 내려서 최신 메시지를 확인해야 하는 문제가 발생했다. 그래서 채팅을 입력했을때 자동으로 스크롤이 맨 밑으로 내려가게 하는 방법을 찾아 해결했다. useRef useRef를 사용했는데 useRef를 간단히 말하면 React에서 특정 DOM요소에 접근할 때 사용하는 hook이다. 자바스크립트를 사용할 경우에는 getElementById나 querySel..

221208 TIL useLocalStorage [내부링크]

오늘은 오전, 오후에는 css작업을 어느 정도 하고 저녁에는 어드민 로그인을 구현했다. 어드민에는 회원가입도 필요 없고 로그인도 기존에 사용자단에서 로그인 시 필요한 인터셉터와 jwt가 이미 만들어져 있었기 때문에 금방 만들 수 있을 거라고 생각했다. 일단 어드민 계정 생성을 위해 엔티티를 만들어 주고 어드민 계정은 db에 직접 하나 넣어줬다. 이후 로그인 시 프론트에서 입력받은 계정이 어드민 계정인지 아닌지 검증하기 위한 로직을 작성해주고 로그인이 성공하면 입력받은 아이디를 jwt를 이용해 토큰으로 만들어서 해당 토큰을 프론트로 전달했다. db에 넣어준 어드민 계정으로 로그인 성공 시 토큰이 잘 전달되는지 로그인을 해봤는데 정상적으로 accessToken을 받은 것까지 확인할 수 있었다. 이제 어드민 ..

221207 TIL 어떤 게시판에 게시글이 가장 많을까? [내부링크]

오늘은 최상위 게시판(EPL, LaLiga, SerieA, Bundesliga) 4개 중 어떤 게시판의 비중이 가장 큰지 알기 위해 4대 리그 게시판별 게시글을 종합하는 작업을 했다. 예를 들어 EPL 게시판을 부모로 갖고 있는 하위 게시판에 있는 게시글을 모두 종합하는 작업이다. 그런데 리그 게시판이 하위 게시판들의의 게시글을 갖고 있지 않아 findAll 같이 간단하게 구할 수 있는 문제가 아니였기 때문에 어떻게 모든 게시판의 게시글을 찾을지 고민을 했다. 우선 게시판의 구조가 총 3 depth(리그 게시판 -> 팀 게시판 -> 선수 게시판)로 구성된 게시판이기 때문에 리그 게시판을 부모로 갖고 있는 모든 팀 게시판을 리스트로 담아 팀 게시판 하나하나당 게시글의 개수를 더한 다음 또 팀 게시판 하나하..

221206 TIL 조회수 순으로 게시글 가져오기 [내부링크]

오늘은 어드민 기능 중 인기 게시글을 파악하기 위한 통계 관련 기능을 구현하는 것을 목표로 했다. 조회수가 가장 높은 게시글 순위, 댓글이 가장 많이 달린 게시글 순위, 좋아요를 가장 많이 받은 게시글 순위 이렇게 세 가지 순위를 통계자료로 보여주기로 기획했었다. 조회수가 가장 높은순으로 게시글 3개를 어떻게 가져올까 생각하다 이전에 동료 한분이 평점순으로 장소를 가져오려고 했던 게 생각이 났다. 조회수 순으로 가져오는거랑 평점순으로 가져오라 방법은 똑같을 거라고 생각을 해 아샬 님이 평점순으로 장소를 가져오는 방법에 대해 답변을 주신 메가 오버플로우를 찾아봤는데 findTop3 OrderBy~~ 이런 형태로 가져올 수 있다는것을 알게 되었다. 바로 아래와 같이 코드를 작성했다. Hit(조회수)를 기준으..

메가테라 23주차 주간회고 (프로젝트 7주차 회고) [내부링크]

23주 차 회고 (프로젝트 7주 차 회고) 메가 테라 23주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 7주 차 작업 목표 7주 차의 가장 큰 목표는 어드민 기능을 핵심적인 것부터 최대한 많이 구현하는 것이었다. 그래서 기존에 계획했던 게시판의 어드민 기능 중 가장 핵심적이고, 없으면 안 되는 기능 3가지를 뽑아 무조건 구현하도록 최우선 순위로 선정했다. 핵심적인 3가지 기능은 아래와 같다. 1. 전체 멤버 관리 전체 멤버 수를 확인할 수 있다. 멤버의 등급을 변경할 수 있다. 멤버를 강제 탈퇴시킬 수 있다. 회원 정보(아이디, 닉네임, 등급, 게시글 작성 수, 댓글 작성 수)를 확인할 수 있다. 2. 게시판 관리 하위 게시판 생성 (3 depth) 게시판 삭제 3. 등업 신청 관리 등업 신청..

221205 TIL 내 채팅과 다른 사용자의 채팅 구분하기 [내부링크]

오늘은 기존에 구현했던 채팅 기능을 더 보완하는 작업을 했다. 작업 목표는 카카오톡처럼 자신이 쓴 채팅과 상대방이 쓴 채팅의 말풍선 색이 다르게 보이도록 하고, 상대방의 채팅 말풍선에 상대방의 닉네임을 노출시키도록 하는 것이었다. 기존에는 누가 채팅을 치든 구분이 안되어서 익명 채팅방 같은 느낌이었는데 말풍선과 닉네임을 노출시켜 구분이 가도록 하는 것이었다. 우선 위와 같은 기능을 구현하기 위해 고민했던 건 자신이 쓴 채팅과 다른 사용자가 쓴 채팅을 어떻게 구별할지였다. 우선 두 가지 방법을 떠올렸는데 아래와 같다. 1. 채팅을 보낼 때 아래와 같이 자신의 닉네임(writer)을 같이 보내게 했기 때문에 메시지를 받는 사용자도 writer가 누구인지 알 수 있어 메시지를 받을 때 writer와 현재 로그..

221204 TIL 등업 신청 현황 확인하기 [내부링크]

오늘은 등업 신청 관련해서 마음에 들지 않는 부분이 있어 기능을 좀 더 보완해봤다. 이전에 등업 신청 방법은 사용자가 등업 신청을 하면 관리자가 수락할 때까지 신청 상태가 어떻게 되었는지 알 수가 없었다. 등업 신청이 수락되었는지 알수있는 방법도 자신의 등급이 신청한 등급으로 되어있으면 수락된 상태인 것을 알 수 있는 이상한 상태였다. 그래서 이 형태를 수정하기위해 생각해낸 방법은 등업 신청 게시판에서 자신의 등업 신청 현황이 보이게 하는 것이었다. 등업 신청 현황은 자신의 것만 보이게 하고 신청 상태를 3가지로 나눠봤다. 1. 진행중인(심사중) 상태 2. 신청 완료된 상태 3. 거절된 상태 등업 신청 게시판에 자신이 이전에 신청했던 기록도 모두 볼 수 있도록 신청이 거절되어도 해당 신청 글을 지우는 게..

221203 TIL 하위 게시판 생성하기 [내부링크]

오늘의 작업 목표는 게시판을 생성하는 기능인데 게시판을 그냥 생성하는 게 아니라 게시판 하나를 선택하면 선택한 게시판의 하위 게시판이 생기는 기능이었다. 예를 들어 EPL 게시판이 존재하면 하위 게시판으로 토트넘, 아스날 등등 팀 게시판을 생성할 수 있고 또 토트넘 팀 게시판에 손흥민, 헤리케인 같은 선수 게시판을 생성하는 것이었다. 기존에 게시판 Entity를 만들 때 위와 같은 기능을 구현하기 위해 게시판 Entity를 설계할 때 게시판 필드에 상위 게시판 아이디 값을 참조하기 위한 parentId 값을 생성했었다. 그래서 관리자 페이지에서 게시판을 생성할 때 작업 설계를 아래와 같이 했다. 1. 관리자 페이지에 현재 게시판을 리스트 시킨다. 2. 현재 존재하는 게시판 중 하위 게시판을 생성할 게시판..

221202 TIL 사용자 강제 탈퇴시키기 [내부링크]

어제 구현하지 못해 오늘로 미뤄진 작업인 관리자 페이지에서 사용자를 강제 탈퇴하는 기능을 구현해봤다. 사용자를 DB에서 지우기 위해서는 해당 사용자의 아이디를 칼럼으로 갖고 있는 Entity도 같이 제거해줘야 했다. 사용자가 작성한 게시글, 댓글, 대댓글이 있는데 여기서도 게시글과 댓글, 대댓글 사이에 연관관계가 맺어져 있어 지우는 순서도 중요했다. 대댓글이 댓글의 아이디를 갖고 있고 댓글이 게시글의 아이디를 갖고 있기 때문에 지우는 순서를 대댓글 -> 댓글 -> 게시글 순으로 지운 다음 사용자를 제거해야 했다. 그런데 위와 같은 과정을 거치지 않고 Entity를 지울때 연관관계에 있는 모든 것들을 한 번에 같이 지우는 방법이 JPA에 존재하지 않을까 생각해서 검색을 해봤다. 역시 특정 entity를 지..

221201 TIL 관리자 페이지에서 회원 정보 불러오기 [내부링크]

오늘의 작업 목표는 관리자 페이지에서 모든 회원 정보(아이디, 닉네임, 프로필 사진, 작성한 게시글 수, 작성한 댓글 + 대댓글 수)를 확인하고 선택한 사용자의 등급을 변경하거나 강제 탈퇴시키는 기능 그리고 사용자의 아이디를 입력하면 해당 사용자를 찾아오는 기능을 구현하는 것이었다. 우선 작업 결과에 대해 먼저 말하면 계획한 기능을 모두 구현하지 못했다. 계획을 세우면서도 약간 무리하는 것 같은 느낌도 있었지만 이 정도는 해야 일정 안에 최소한의 관리자 기능은 만들 수 있을 것 같아 진행했었는데... 그래도 회원 정보를 불러오는 것과 선택한 유저의 등급을 변경하는 기능은 구현했다. 체크박스로 선택한 사용자의 등급을 변경하는건 이전에 마이페이지에서 선택 한 게시글이나 댓글을 지우는 갓을 구현한 적이 있었기..

221130 TIL 어드민이 등업 신청 관리하기 [내부링크]

오늘은 사용자가 등업 게시판에 등업 신청 게시글을 올리면 관리자가 이를 확인하고 승인해주는 기능을 구현했다. 우선 사용자의 페이지에서 등업 신청 폼이 필요했다. 리액트의 Hook Form을 이용해서 신청 폼을 만들고 신청 폼에서는 신청 등급, 신청 사유를 적고 해당 정보들과 신청자의 닉네임을 백엔드로 post 요청한다. 이때 중복 신청을 방지하기 위해 이미 신청 중에 있는 사용자는 신청 못하게 해야 했다. 그래서 신청한 유저 닉네임으로 신청 게시글 레파지토리에서 신청한 게시글이 존재하는지 (existsByApplicant_Name) 확인 후 있으면 예외처리를 해주었다. 성공적으로 POST 요청된 신청 게시글은 어드민 페이지에서 게시글 리스트들을 확인할 수 있다. 관리자가 신청자의 정보를 확인하고 승인이 ..

221129 TIL 어드민에 대해 몰랐던 사실 [내부링크]

오후에 동료분이 노아님께 어드민에 관련해서 여러 가지 질문을 하시는 것을 보고 마침 어드민 관련해서 고민하고 있던 터라 같이 듣다가 궁금했던 것 몇 가지를 물어보면서 오해하고 있던 사실과 몰랐던 정보를 얻을 수 있었다. 우선 어드민을 맨 처음 기획할 때 네이버 카페처럼 서비스를 이용하는 사용자가 어드민의 역할(카페 매니저)을 얻을 수 있는 형태로 어드민 계정을 따로 관리하려고 하지는 않았다. 사실 이때만 해도 어드민 계정 같은걸 이용해 본적이 없어서 어드민 계정을 따로 관리해야 한다는 개념을 몰랐었다. 그래서 그냥 네이버 카페처럼 사용자가 어드민의 역할을 부여받으면 어드민 계정이 되는 줄 알 있던 나... 이 무튼 노아님이 어드민 계정은 어드민 레파지토리를 만들어서 관리해주는 게 좋다고 말해주셨다. 컨트..

221128 TIL 사용자 등급을 위한 enum클래스 [내부링크]

오늘 5번째 스프린트 회고를 끝냄으로써 남은 기간은 디자인 주를 한 주를 제외하면 일주일밖에 남지 않았다. 남은 일주일간 관리자 페이지를 만들어야 하기 때문에 오늘 관리자 등급을 어떻게 구현할 것인지에 대해 알아봤다. 우선 내 프로젝트의 경우 관리자 or 일반 사용자 등급이 두 가지로 나뉘는 게 아니라 사용자의 여러 가지 등급이 존재하도록 초반에 기획했었다. 각 사용자의 등급에 따라 접근할 수 있는 콘텐츠가 다르게 하기 위함이었다. 그래서 프로젝트 초반에 설계했던 객체 다이어그램을 보면 User Entity와 Grade Entity가 존재하고 Grade Entity는 User를 List로 갖는 형식으로 설계를 했었던 기록이 있다. 하지만 최근에 객체의 구조가 바뀌면서 Grade가 Entity일 필요가 없..

메가테라 22주차 주간회고 (프로젝트 6주차 회고) [내부링크]

22주 차 회고 (프로젝트 6주 차 회고) 메가 테라 22주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 6주 차 작업 목표 6주 차의 목표를 세울 때 평소보다 더 타이트하게 잡았다. 그 이유는 디자인 주를 제외하고 프로젝트 마감까지 2주가 남았었는데 또 한 주는 관리자 페이지를 만들어야 했기 때문에 6주 차 동안에 사용자가 사용하는 기능은 모두 완성해야 했기 때문이다. 프로젝트 6주 차의 구체적인 작업 목표를 나열해봤다. 1. 마이 페이지(유저 정보 페이지)를 완성한다. 자신의 정보를 확인하고 수정할 수 있다.(닉네임, 프로필 사진) 마이 페이지에서 자신이 작성한 게시글, 댓글 수를 확인할 수 있다. 자신이 작성한 게시글, 댓글을 삭제할 수 있다. 자신이 좋아요를 누른 게시글을 확인 및 좋아요..

221127 TIL 검색 기능 구현 중 만난 문제 (pagination) [내부링크]

오늘은 어제 게시판 검색 기능을 간단하게 구현했던 것에 페이지네이션 기능까지 추가하려 하는데 발생한 문제와 해결 방법을 적어 보려 한다. 문제 상황 게시글 제목에 "검색"이라는 키워드가 포함된 게시물을 찾는데 총 11개가 존재할 경우 한 페이지에 10개가 출력이 돼야 하는데 9개만 출력이 되는 문제가 있었다. 근데 이 문제가 모든 게시물이 있는 전체 게시판에서는 발생하지 않는데 특정 카테고리의 게시물만 있는 게시판에서만 문제가 발생했었다. 왜 모든 게시물이 있는 전체 게시판에서는 정상적으로 10개씩 검색 결과가 출력되는데 특정 게시판에서만 10개가 아닌 9개만 출력이 되는지 의아했었다. 아래는 게시물을 search 하는 controller이다. 페이지 네이션을 위한 Pageable객체와 어떤 게시판인지 ..

221126 TIL 게시판에서 원하는 게시물 찾기 [내부링크]

오늘은 게시판 서비스에 없으면 불편한 기능인 검색 기능을 구현하려고 한다. 게시판에 검색기능이 없다고 생각해보자 만일 게시판에 게시글이 3, 4개 정도 있으면 찾으려는 게시물을 한눈에 찾을 수 있겠지만 게시물이 20, 30개만 돼도 찾으려는 게시물 하나를 찾기 위해서 2페이지 가서 찾고 3페이지 가서 찾는 과정이 필요하다. 사용자 입장에서 이는 매우 불편하기 때문에 게시판에서 검색기능은 필수라고 생각이 된다. JPA에서 검색 기능 검색을 하기 위해선 검색한 단어가 포함된 게시글들을 불러와야 하는데 JPA를 사용하면 편리하게 Repository의 메서드 이름으로 쿼리를 지정해서 찾을 수 있다. List posts = postRepository.findByTitleContaining(keyword); 위와 ..

221125 TIL OAuth 2.0 알아보기 [내부링크]

요즘 대부분의 웹/앱 서비스를 사용하면 필수로 만나게 되는 기능이 있다. 바로 해당 서비스의 사이트에 회원가입하지 않고도 다른 서비스의 계정을 가져와 사용할 수 있도록 하는 기능이다. 로그인을 하려고 하면 하단에 '카카오 계정으로 로그인', '네이버 계정으로 로그인' 등과 같이 버튼만 클릭하면 간편하게 로그인할 수 있는 기능을 쉽게 접할 수 있다. 오늘은 그 기능을 프로젝트에 적용하기 위해 방법들을 찾아봤다. 위와 같이 타 서비스의 계정을 사용해서 인증하는 방식을 OAuth 2.0 인증 방식이라고 한다. OAuth2.0 OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로써 사용되는, 접근 ..

221124 TIL axios.delete 요청 시 데이터 전달하기 [내부링크]

오늘은 마이 페이지의 게시글 리스트에서 체크한 게시글을 삭제하는 기능을 구현했다. 처음에 작업 설계할 때 이 기능을 어떻게 구현해야 할지 전혀 감이 잡히지 않아 작업 설계하는데 어려움을 겪었다. 우선 delete 요청을 기존에 게시글 삭제할때 사용하던 api요청을 사용할지 새로 만들어서 새로운 api 요청을 사용할지 고민을 했었고 두 번째로 체크박스에 선택한 게시글의 아이디를 어떻게 저장하고 어떻게 지워야 할지 기능 구현에 대한 고민을 했었다. 우선 delete요청 하는 방법으로는 두 가지 방법을 생각했는데 그전에 체크한 게시글의 아이디를 저장하는 방법부터 정리해보자. 첫 번째로 체크한 게시글의 아이디를 저장할 배열을 useState로 만들어준다. 그리고 checkbox 타입인 input에 onChang..

221123 TIL columnDefinition으로 기본값 설정 [내부링크]

오늘은 마이페이지에서 자신이 작성한 게시글 또는 댓글을 삭제할 수 있게 삭제 버튼과 자신의 정보를 수정할 수 있는 수정 버튼이 필요했다. 근데 이 버튼들은 자신의 정보를 확인할 때만 이 버튼이 보이도록 설정을 해야 했다. 방법은 두가지 정도 떠올렸었는데 첫 번째로는 프론트엔드에서 로그인할 때 스토어에 로그인한 유저의 정보를 저장했기 때문에 사용자 페이지에 접속한 사용자의 아이디와 사용자 페이지에 접근해 백엔드에서 받아온 사용자의 정보가 같으면 버튼이 보이도록 하는 방법이 첫 번째로 생각해낸 방법이다. 두 번째 방법은 사용자 페이지에 접근할 때 local storage에 저장되어 있는 access token을 header에 전달해서 백엔드에서 전달받은 access token을 decode해 확인하려는 사용..

221122 TIL 마이 페이지 구현하기 [내부링크]

오늘의 작업 목표는 사용자 정보 페이지를 만드는 것으로 아래와 같은 화면을 만드는 것이었다. 해당 페이지의 url을 처음에는 /users/{Id}로 사용자의 아이디를 이용해 url을 구성하려고 했지만 생각해보니 다른 사용자의 아이디가 주소창에 공개되면 안 될 것 같다는 생각을 했다. 다른 서비스에서도 다른 사용자의 아이디를 전부 노출시키지 않고 아이디의 몇 글자만 보이고 나머지는 *으로 처리했던 게 생각이 났었다. 그래서 url은 /users? id={userId}으로 쿼리 스트링을 이용해 JPA에서 자동으로 부여해주는 id값으로 구성했다. 그리고 REST API는 GET /users/{userId}로 설계했다. 사용자 정보 페이지에서 필요한 정보는 아래와 같다. 1. 사용자가 작성한 게시글 리스트와 게..

221121 TIL 의식적으로 기록하자 [내부링크]

오늘은 5주차 스프린트 회의가 이루어졌다. 스프린트 회의를 진행하고 나서 노아님이 이야기하신 피드백을 떠올려보자. 우선 노아님이 가장 강조하신것은 작업을 진행하면서 작업 내용이나 배운점 느낀점들을 구체적으로 기록을 해야한다는 것이였다. 그런데 나의 문서에는 과정은 전혀 없고 결과에 대한 기록만 있고 구체적인 내용을 기록한게 없었다. 구체적인 작업 내용을 작업하면서 기록하지 않으면 나중에 필요할때 생각이 나지 않을 수 있기 때문에 힘들더라도 작업하면서 기록하는게 가장 좋다고 말씀해주셨다. 대표적인 예로 내가 구현한 채팅기능도 3일정도 공부하면서 구현을 했었는데 어떻게 구현했는지 어떤 내용들을 배웠었는지 구체적으로 기록을 남긴게 없었다. 이전에 채팅 기능 구현할때 TIL에 기록을 했었다고 생각했었는데 다시 ..

메가테라 21주차 주간회고 (프로젝트 5주차 회고) [내부링크]

21주 차 회고 (프로젝트 5주 차 회고) 메가 테라 21주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 5주 차 작업 목표 프로젝트 5주 차의 구체적인 작업 목표를 나열해봤다. 1. 사용자 스토리를 As - I - So 구조로 수정하고 수정된 사용자 스토리를 바탕으로 인수 테스트 작성하기 2. 자신이 작성한 게시글, 댓글, 대댓글만 수정 또는 삭제할 수 있도록 로그인 기능 구현하기 3. 자신이 확인하고 싶은 리그의 경기 일정(오늘 경기, 선택한 날짜의 경기 일정)을 확인할 수 있게 한다. 4. 경기 시작 1시간 전 경기의 양 팀의 이전 기록과 전력을 비교할 수 있게 한다. 5. 사용자 정보 페이지를 구현해 해당 사용자가 작성한 글, 댓글을 확인할 수 있게 한다. 5주 차 작업 목표를 위와 같이..

221120 TIL 지저분했던 코드 한줄로 해결하기 [내부링크]

오늘은 경기 일정 페이지를 만들 때 해당 경기의 경기 시간을 보여줘야 하는데 api를 요청해서 받아오는 경기 시간이 영국 시간 기준(UTC)이라 한국 시간으로 계산(+9 시간)을 해줘야 하는 작업이 필요했다. 우선 받아오는 경기 시간의 데이터는 아래와 같다. 이 중 연도는 필요 없고 월, 일만 필요했기 때문에 substring으로 문자열을 잘라 14:00의 시간만 가져와서 시차 계산을 해주는 함수를 만들어서 화면에 보여주도록 했다. 시차 계산하는 함수는 UTC기준으로 가져오는 시간에 +9를 해주는데 24가 넘어가면 00:00부터 계산하는 로직을 작성했다. 위 사진과 같이 원하는 모양으로 만들고 11:00분이 잘 나오는지 테스트를 돌려보는데... 테스트가 통과가 되지 않는 문제가 있었다. 분명 화면에는 1..

221119 TIL Grid와 친해지기 [내부링크]

이번 주 월요일부터 사용자 스토리, 인수 테스트 재작성, 구조 재 설계로 인한 리팩터링 등등 다른 부가적인 작업들을 하느라 작업 진도를 전혀 못 나가고 있었다. 오늘 오후에 최종적으로 category가 하던 역할을 board가 하도록 위임해주는 작업을 마침으로써 다음 기능을 구현할 수 있게 되었다. 오늘 구현하려 했던 기능은 리그의 경기 일정을 확인하는 것이었다. 리그의 경기 일정은 rapid api를 사용해서 원하는 리그의 경기 일정을 모두 받아올 수 있다는 것을 이전에 확인했었다. RapidApi 사용법 : https://seungjjun.tistory.com/166 근데 param에 입력해준 시즌의 1년 동안 모든 리그의 일정을 받아와서 이미 경기가 끝나서 불필요한 경기 일정도 가져오는 문제가 있었..

221118 TIL 게시판 객체를 생성해 리팩터링 [내부링크]

어제 협력에 필요한 객체의 종류와 책임, 메시지를 정리했고 오늘은 설계한 것을 바탕으로 어떻게 리팩터링 할지 고민하는데 시간을 많이 사용했다. 우선 카테고리와 게시판 객체 사이의 관계가 애매했었는데 그 이유가 게시판의 이름이 카테고리 이름이랑 동일한 역할을 한다고 생각을 했다. 왜냐하면 카테고리는 어차피 축구라는 카테고리 안에 여러 개의 게시판이 존재할 것이기 때문에 카테고리 객체가 필요한가에 대한 생각을 하게 되었다. 그래서 동료들에게 카테고리와 게시판에 대한 관계(카테고리 안에 여러 개의 게시판, 게시판 안에 여러개의 게시물)를 설명하니 카테고리가 굳이 필요 없을 것 같다는 이야기를 해줬다. 그래서 기존에 카테고리가 하던 역할(카테고리에 맞는 게시글들을 프론트 엔드로 넘겨주는 것)을 게시판이 하도록 ..

221117 TIL 객체들로 구성된 작은 세상을 만들어 보자 [내부링크]

어제 했던 협력 설계의 잘못된 부분을 감사하게도 아샬님께서 짚어주셨다. 어제 했던 협력 설계 인데 아샬님께서는 사용자에서 뭔가가 시작되었다는 건 의인화가 충분히 이뤄지지 않았다는 신호라고 말해주셨다. 사실 어제 혼자 설계하면서도 "게시물을 작성하라"메시지를 사용자부터 시작하면 게시물뿐만 아니라 다른 모든 것들도 다 사용자부터 시작하게 될 것 같은 느낌이 들어서 이게 맞나? 라는 생각이 들어 이상함을 느꼈었다. 아샬님께서 일반적인 게시판 서비스는 게시판이 “게시물을 작성해라”를 메시지를 받는다는 말을 해주셨다. 기존에 설계한 객체에서 게시판 객체가 존재하지 않았었는데 게시판 객체를 만들어서 객사오를 참조해 새롭게 처음부터 설계해봤다. 우선 게시판을 구성하는 요소들에 대해서 고민하는 것이 좋다고 책에 나와있..

221116 TIL 협력을 설계하자 [내부링크]

오늘은 이전에 설계했던 객체가 잘못되었다는 것을 인지하고 객체지향의 사실과 오해를 참고해서 객체를 재설계해봤다. 객사오에서는 객체지향 설계의 첫 번째 목표를 훌륭한 객체를 설계하는 것이 아니라 훌륭한 협력을 설계하는 것이라고 강조하고 있었다. 협력을 설계한다는 것은 객체가 메시지를 선택하는 것이 아닌 메시지가 객체를 선택해야 한다는 것을 의미하기 때문에 메시지를 먼저 선택 후 메시지를 수신하기에 적절한 객체를 선택해야 한다고 한다. 솔직히 글만 봐서는 잘 와닿지 않았었다. 그래서 직접 내 프로젝트에 적용해봤다. 현재 게시판에서 설계하려는 협력은 게시글을 작성하는 것인데 메시지로 작성한다면 "게시글을 작성하라"이다. 객사오에서 나오는 방법처럼 화살표를 이용해서 설계해봤다. "게시글을 작성하라" 메시지 위에..

221115 TIL 인수테스트 하면서 만난 문제 [내부링크]

오늘은 어제 작성한 사용자 스토리를 바탕으로 인수 테스트를 다시 작성하고 코드로 옮겨서 인수 테스트를 통해 지금까지 구현한 기능을 검증하기 시작했다. 우선 로그인 기능이 구현되지 않았기 때문에 로그인이 안되었을 때의 시나리오를 제외하고는 모두 테스트하는 와중에 막히는 테스트가 있었는데 게시글 작성할 때 게시글 제목이나 내용을 입력하지 않았을 때 나오는 팝업창의 문구가 제대로 나오는지 테스트하는 부분이었다. 제목은 입력하지 않고 카테고리 선택(selectOption), 내용 작성(fillField)을 하고 등록 버튼을 클릭(click)을 하도록 인수 테스트를 작성하고 ui화면으로 검사를 하는데 카테고리 선택하고 내용 입력하고 버튼도 잘 클릭해서 "제목을 입력해주세요"라는 팝업창이 뜨는 것까지는 확인했는데 ..

메가테라 20주차 주간회고 (프로젝트 4주차 회고) [내부링크]

20주 차 회고 메가 테라 20주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 프로젝트 4주 차의 목표는 전체 게시판의 완성도를 높이고 게시판의 CRUD기능 구현하는 것과 월, 화에 아샬 님이 말씀해주신 내용을 바탕으로 controller와 service를 리팩터링 하는 것이 목표였다. 그래서 아래와 같이 작업 계획을 세웠고 작업에 대한 결과이다. 최종적으로 HOT 게시판 구현을 하지 못해서 계획했던 작업들을 모두 하지 못했기 때문에 계획한 작업을 다 하지 못한 이유에 대해서 회고를 해보려고 한다. 우연의 산물 이번 주 계획한 작업을 모두 달성하지 못한 첫 번째 이유는 컨트롤러와 서비스를 리팩터링 하는 부분에서 생각했던 것보다 수정해야 하는 부분들이 많아서 기존에 계획했던 스토리 포인트의 2배를..

221114 TIL 원칙을 위배해서는 안된다. [내부링크]

인수 테스트를 통해 검증하자 4주 차 스프린트 회고가 있었던 날이다. 노아님이 하나의 기능이 완성될 때마다 작성한 인수 테스트를 실행(codeceptJs)시켜 통과가 돼야 완성된 거라고 말씀을 하셨다. 그 말을 듣고 아차! 싶었다. 왜냐 나는 인수 테스트를 기획 문서에만 작성하고 작성한 인수 테스트를 코드로 옮기지 않았기 때문에 기능들을 구현해도 실행시킬 인수 테스트가 없었기 때문이다. 이는 완전히 잘못된 행동이었음을 깨닫게 되었다. 우선 노아님이 알려주신 올바른 프로젝트의 작업 순서는 아래와 같다. 1. 구현할 기능에 대해서 작성해 놓은 사용자 스토리를 바탕으로 기획 문서에 인수 테스트를 작성한다 2. 문서에 작성한 인수 테스트를 코드로 옮긴다. 3. 단위 테스트 코드를 작성하며 기능을 구현한다. 4...

221113 TIL 댓글을 삭제했는데 대댓글은 왜? [내부링크]

댓글 삭제 기능 구현 중 대댓글과 관련된 이슈가 발생했다. 대댓글이 있는 댓글을 삭제하면 밑에 달려있던 대댓글까지 1+1 마냥 같이 삭제가 돼버리는 문제 발생한 것이다. 근데 데이터베이스를 확인해보니 댓글은 지워졌지만 대댓글은 지워지지 않았었다. 사실은 대댓글은 삭제가 된 것이 아니라 화면에 보이지 않는 것이었다. 왜냐하면 댓글이 있어야만 해당 댓글 밑에 대댓글이 보이게 해 놨기 때문이다. 댓글이 없어져 버리면 대댓글도 같이 없어져 버리는 기이한 현상이... 그래서 댓글을 삭제할 때 대댓글을 어떻게 처리해줄까 방법을 고민해봤다. 처음으로 생각해낸 방법은 댓글 삭제 시 대댓글이 있으면 대댓글이 존재하기 때문에 댓글을 삭제할 수 없다는 문구가 나오게 하는 것이었다. 두 번째 방법은 대댓글이 있는 경우에도 댓..

221112 TIL 바꿔야 할 것 같으면 바꾸자 [내부링크]

오늘은 리팩터링은 필요하다고 느꼈을때 바로 해주는게 좋다는것을 깨달은 날이다. Post라는 게시글 세부 정보 컴포넌트를 만들면서 게시글에 필요한 정보들을 PostPage에서 Post 컴포넌트로 props를 전달해주는 구조였는데 props가 점점 쌓여 20개가 넘어가니까 리팩터링할때 엄청난 괴로움을 느꼈다. 현재 구조가 게시글 세부 페이지에 필요한 정보들을 post의 상위 컴포넌트인 PostPage에서 post의 상태를 관리하는 store를 이용해 상태들을 props로 내려주는 형태(PostPage -> Post)로 만들어져 있다. 그리고 게시글안에 댓글도 들어가는데 댓글은 별도의 컴포넌트로 만들어서 post안에 댓글 컴포넌트도 있기 때문에 최상위 컴포넌트인 PostPage에서 Post컴포넌트에 내려줘야하..

221111 TIL useForm의 onChange (feat. register) [내부링크]

오늘은 게시글 수정 기능 구현하다 만난 문제와 해결방법을 적어보려고 한다. 우선 게시글을 수정할때 react-hook-form의 useForm을 이용해서 form을 생성해 수정된 게시글을 제출할 생각이였다. 수정할때 요구사항으로는 수정하려는 게시글의 제목과 내용을 수정할때 수정 폼에서 내용이 이미 입력된 상태여야 했다. 그래서 input태그 안에 value를 설정하고 value안에 기존에 갖고 있던 제목과 내용을 넣어줬다. 그리고 value값을 설정해주었기 때문에 입력할때 변화가 일어나게 하려면 input태그 안에 onChange를 넣어서 글자가 바뀌면 useState를 이용해 value값을 바꾸려고 했다. 그런데 아무리 입력해도 value값이 바뀌지 않고 변화하지 않는 문제가 발생했다. 처음에는 use..

221110 Pageable 사용해서 페이지네이션 구현하기 [내부링크]

오늘은 게시판에서 게시글이 많을 때 게시판의 가독성적인 부분이나 정리된 화면을 위한 페이지네이션 기능을 구현했다. 페이지네이션(Pagination)이란? 게시판에서 모든 게시글을 한 화면에 모두 보여준 게 아니라 페이지를 나눠서 제공하는 것을 의미한다. 정렬 방식과 페이지의 크기, 그리고 몇 번째 페이지인지의 요청에 따라 정보를 전달해주는 것이 Pagination이다. 구현 목표 화면 한 화면에 게시글은 총 10개만 출력이 되고 넘어갈 시 다음 페이지 버튼이 생성된다. 한 화면에 보여주는 페이지 버튼은 총 10개(게시글 100개) 게시글이 100개가 넘어갈 시 다음 페이지(11페이지)로 이동할 수 있는 "다음"버튼이 생성된다. 만약 게시글이 100개가 존재하지 않는다면 다음 버튼은 생성되지 않는다. 11..

221109 TIL 카테고리에 맞는 게시글 불러오기 (feat. 쿼리스트링) [내부링크]

오늘은 카테고리별 게시판을 만들어 봤다. 일단 카테고리별로 출력되는 게시글이 달라져야 했기 때문에 쿼리 스트링을 사용해서 카테고리의 아이디 값을 얻어와 카테고리에 포함된 모든 게시글들을 출력하도록 했다. localhost:8080/posts?category=1 여기서 (?category=1) 이 부분을 쿼리 스트링이라고 불린다. 그러면 위와 같은 path에서 쿼리만 가져오는건 어떻게 할 수 있을까?? useLocation 우선 useLocation을 사용해서 쿼리를 받아오는 방법을 알아보자. const location = useLocation(); useLocation을 이용해 location을 콘솔 창에 찍어보면 아래와 같은 결과가 나온다. 그중 search를 보면 우리가 원하는 정보인 쿼리("? ca..

221108 TIL Value Object를 활용하자 [내부링크]

오늘도 아샬 님이 오셔서 라이브 코딩을 하며 여러 가지 꿀팁을 전달해주시고 가는데 그중에서 오늘 내 코드에 적용한 것들만 정리해 봤다. Controller는 간단하게 Controller는 최대한 간단하게 만드는 게 좋다고 해주셨다. 그에 반해 나의 Controller는 상당히 복잡했다. 그 이유가 post라는 게시글에 전달해줘야 할 정보가 post객체뿐만 아니라 comment 같은 부가적인 객체들도 같이 전달해줘야 했기 때문에 여러 서비스를 호출해서 전달해줬는데 이것 때문에 복잡한 Controller가 만들어진 것이었다. controller를 최대한 간단하게 만들기 위해서 하나의 Action에서는 하나의 Application Service가 호출되어야 한다. 그래서 여러 개의 서비스를 불러서 전달해주던 ..

221107 TIL 가치 중심의 사용자 스토리 [내부링크]

월요일은 한주의 스프린트가 끝나는 날로 트레이너님과 스프린트 점검과 이번 주의 작업 계획을 다시 세우는 날이다. 저번 주와 다르게 이번 주는 채팅 기능 구현하는데 시간을 많이 소비해 구현해야 할 태스크들을 전부 끝내지 못한 상태라 찝찝함이 남아있는 상태로 스프린트 점검 시간을 기다리고 있었는데 아샬 님이 직접 내려오셔서 동료 한분이 쓰신 기획서를 모두 같이 보면서 피드백을 들었다. 그중에는 동료 한분에게만 국한되는 이야기가 아니라 프로젝트를 진행하고 있는 모두가 공감할만한 이야기와 알아두면 좋을 내용들도 너무 많이 이야기해주셨다. 기획서 작성할 때 가장 힘들었던 사용자 스토리 부분에 대해서 우선 말을 해주셨는데 가치 중심으로 썼다고 생각했던 나의 사용자 스토리가 정말로 가치 중심인지 다시 한번 생각하게 ..

메가테라 19주차 주간회고 (프로젝트 3주차 회고) [내부링크]

19주 차 회고 메가 테라 19주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 리팩터링의 연속 이번 주는 객체 구조를 바꾸는 데 시간을 너무 많이 사용했다. 실제로 주중에 2번을 바꾸면서 좋아요 기능과 댓글 기능을 구현하는데 예상했던 스토리 포인트를 객체 구조를 바꾸는 데 사용을 해서 예상했던 것보다 오버되기도 했다. 모양이 이상하긴 한데 맨 처음 객체를 설계할 때 작성했던 것이다. post라는 게시글이 담고 있어야 할 정보들의 연관관계를 @ManyToOne과 @OneToMany 어노테이션을 이용해 매핑했었는데 이 방식 말고 한 객체 안에서 다른 객체의 정보를 들고 있지 않고 자신이 갖고 있어야 할 갖고 기존에 갖고 있던 다른 객체들의 정보는 아이디 값만 갖는 방식으로 구조를 다시 바꿨다. po..

221106 TIL [Spring boot + React]실시간 채팅 기능 구현하기 - 4 [내부링크]

오늘 드디어 Spring + React를 이용해서 실시간 채팅 기능을 구현했다. WebSocket으로 채팅방 하나인 1:1 채팅 기능은 구글링 조금만 하면 금방 구현할 수 있었는데 채팅방이 여러 개를 구현하기 위해 STOMP를 사용해야 할 때부터 막히기 시작했었다. 구글링 하면 정보는 많았지만 STOMP를 전혀 알지 못한 채 알아보려니까 이게 맞는 정보인지 틀린 정보인지 판별이 되지 않아 하나씩 전부 읽어보면서 확인하는 작업을 하는데 너무 오랜 시간이 걸렸다... ㅠㅠ 솔직히 실시간 채팅 하나 구현하는데 4일이나 걸릴 줄은 몰랐지만 포기하지 않고 어떻게든 구현했다는 사실과 채팅을 구현하는데 최적의 코드는 아닐지라도 이것저것 해보면서 실시간 채팅을 구현했다는 사실만으로도 너무 기뻤다. 아무튼 어제는 Spr..

221105 TIL [Spring boot + React]실시간 채팅 기능 구현하기 - 3 (with STOMP) [내부링크]

채팅 기능을 아직 구현하지는 못했지만 오늘 배우고 이해한 STOMP에 대해서 정리해보려고 한다. STOMP를 사용하게 되면 text와 binary 두가지 유형의 메시지만 정의하는게 아니라 규격을 갖춘 메시지를 전달할 수 있다. COMMAND header1:value1 header2:value2 Body^@ COMMAND : SEND, SUBSCRIBE를 지시할 수 있다. header : WebSocket만으로는 표현이 불가능한 header를 작성할 수 있다. destination: 이 헤더로 메시지를 보내거나 구독을 할 수 있다. (pub/sub 구현) 예를 들어 아래 코드와 같이 유저A는 3번 채팅방을 구독할 수 있다. SUBSCRIBE destination: /subscribe/chat/room/3 ..

221104 TIL [Spring boot + React]실시간 채팅 기능 구현하기 - 2 [내부링크]

어제 실시간 채팅 기능을 구현하기 위해 Http 방식보다는 WebSocket을 이용해서 구현하는게 더 효율적이라고 판단이되어 WebSocket을 이용해서 구현하기로 결정했다. 그런데 WebSocket을 사용하면 채팅방이 1개밖에 존재하지 못한다는 문제점이 있었다. 여러개의 채팅방이 필요했었기 때문에 WebSocket만으로는 내가 원하는 기능을 구현하지 못할것 같았다. 그래서 멀티 채팅방 기능을 구현할 수 있는 방법을 찾다 STOMP라는 것을 알게되었다. STOMP는 pub/sub패턴을 사용하기 때문에 멀티 채팅방을 구현할 수 있다는 것을 알게되었다. STOMP STOMP(Simple Text Oriented Messaging Protocol)는 메시지의 형식, 유형, 내용 등을 정의하여 메시징 전송을 효..

221103 TIL [Spring boot + React]실시간 채팅 기능 구현하기 - 1 [내부링크]

축구 커뮤니티 사이트의 기능 중 하나인 실제 경기가 진행되는 시간에 채팅방이 열려 실시간으로 응원할 수 있는 기능을 구현하기 위해 실시간 채팅 기능을 구현하고자 한다. 아래 화면은 whimsical 디자인 툴을 이용해서 디자인한 화면인데 이 화면에서 가장 핵심은 실시간 응원인 실시간 채팅 기능이다. 그래서 오늘 짧게나마 실시간 채팅 구현 방법을 공부해 봤다. 우선 실시간으로 채팅을 구현하는 방법으로는 HTTP와 WebSoket 방법이 존재한다. HTTP의 특징 http통신의 특징부터 알아보자 http 통신은 단방향(비연결성)이다. 클라이언트가 보낸 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 비연결성 성질 request - response 구조이다. 서로 지속적으로 연결되어 있는 형태가 ..

221102 TIL JPA n + 1문제란 [내부링크]

모델 설계 관련 이야기를 하던 중 어제 객체 연관 관계를 설정해줄 때 사용한 @ManyToOne, @OneToMany어노테이션을 사용할 때 문제점으로 n + 1 문제를 말해주셨다. n + 1 문제는 무조건 알고 있는 게 좋다고 하셨고 JPA를 사용한다면 알고 있어야 한다고 말하셨다/ 내가 원치 않아도 n + 1 문제를 만날 수 있고 이는 성능에 영향을 줄 수 있기 때문에 n + 1문제는 알고있자 N + 1 문제란? n + 1문제는 엔티티를 조회할 때 1번 조회해야 할 것을 연관 관계가 설정된 N개 종류의 데이터 각각을 추가로 조회하게 돼서 총 N+1번 조회를 하게 되는 문제이다. 예시로 게시글과 댓글을 @ManyToOne, @OneToMany를 이용해 연관 관계를 설정한 Entity 코드이다. Post...

221101 TIL JPA 양방향 연관관계 Infinite recursion문제 [내부링크]

오늘은 어제 학습한 @ManyToOne과 @OneToMany를 활용해서 Entity들을 설계한 대로 객체를 매핑을 하는 작업을 했다. 기존의 모델들을 변경하고 새로만들고 하다 보니까 작성했던 테스트 코드나 프론트엔드에서 값을 전달해주는 방식, 테스트 코드 등 모든 게 바뀌어야 했다. 그래서 오늘 리팩터링 하는데만 스토리 포인트 5를 사용해버렸다.. 모델 설계를 초반에 하고 했어야 했는데 생각없이 첫 주차에 게시글 보기와 작성하는 기능을 만든다고 임시방편으로 만들었던 모델이 오늘 모델들을 다시 설계한 대로 바꾸면서 발생한 문제들을 해결하는 것과 변경해야 하는 코드들이 너무 많아 고통으로 돌아왔다. 작업설계의 중요성.. @JsonManagedReference @JsonBackReferenc @ManyToOn..

221031 TIL @OneToMany, @ManyToOne (feat. mappedby) [내부링크]

오늘은 게시판 객체 간의 구조 설계를 위해 @ManyToOne과 @OneToMany에 대해서 공부했다. 현재 진행 중인 게시판 프로젝트를 예시로 User(사용자)가 1개 이상의 Post(게시글)을 작성할 수 있기 때문에 아래처럼 테이블 구조를 설계했다. 우선 간단하게 OneToMany와 ManyToOne을 먼저 맛보면 아래 구조에서 User 입장에서는 @OneToMany이고 Post입장에서는 @ManyToOne이다. 우선 두 객체를 연결하기 위해서 Pos 객체에 User 객체를 만들고, User 객체에는 User가 쓴 글 모두를 담을 수 있는 List타입의 posts를 만들었다. Post객체에 User에는 @ManyToOne 붙여주고 User객체에 Post List에는 @OneToMany를 붙여주었다. ..

메가테라 18주차 주간회고 (프로젝트 2주차 회고) [내부링크]

18주 차 회고 메가 테라 18주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 기획 끝 개발 시작 이번 주 월요일 시작은 저번 주 개발한 것을 바탕으로 깃허브의 프로젝트를 이용해 칸반 보드를 만들어 백로그를 쭉 작성했다. 사용자 스토리를 적고 그 사용자 스토리를 구현하기 위한 task들을 적어서 백로그 목록을 만들어 체계적으로 개발하는 방법을 배웠다. 이번 주에 실제로 깃허브 프로젝트에서 작성한 칸반 보드를 이용해 개발한 흔적 이번 주에 목표로 잡았던 개발 기능과 개발 시작 전 스토리 포인트 매겼던 것과 실제로 사용한 스토리 포인트 결과이다. 목표했던 기능들은 모두 구현했지만 스토리 포인트에서 어느 정도 오차가 났다. (그래도 생각보다 큰 차이가 나지 않았다.) 3포인트 정도 오차가 났는데 차이..

221030 TIL Spring Boot AWS S3 연동해서 파일 업로드 하기 (S3 Bucket 생성부터 연동까지) [내부링크]

이번 주 스프린트의 핵심 게시글 작성할 때 이미지 업로드하는 기능을 오늘 구현했다. 어제 AWS 가입이 되지 않아 S3를 이용해 이미지를 업로드하는 것을 포기하려 했지만 오늘 일어나서 메일함을 보니 어제 그렇게 기다리던 가입 완료 메일이 새벽 5시에 정상적으로 도착한 것을 확인할 수 있었다. S3를 이용해서 이미지 업로드할 수 있다는 기쁨을 느꼈다. (이미지 업로드를 위해 수많은 삽질을 할 나의 미래를 모른 채..) 게시글에 이미지 업로드를 위한 spring에 AWS S3 연동방법 1. AWS S3 버킷 생성하기 S3 서비스로 이동 후 버킷 만들기로 이동한다. 그다음 버킷 이름(소문자)을 입력한다. 모든 퍼블릭 액세스 차단 체크를 풀어준 다음 밑에 두 개만 다시 체크해준다. 첫 번째 새 ACL(액세스 제..

221029 TIL 게시판 조회수 기능 구현하기 [내부링크]

게시글 상세 페이지 구현중 보여야 하는 정보들을 나열해 보는데 게시글의 조회수가 필요했기 때문에 조회수 기능을 구현해보기로 했다. 처음에는 조회수 기능을 어떻게 구현해야 하지 막막했었는데 생각보다 간단하게 구현할 수 있었다. 조회수 기능 구현 과정 1. Post Entity 조회수를 위한 hit를 Long 타입으로 설정해주었다. 처음에는 조회수를 나타내는 건 자연수이기 때문에 int타입을 사용했었는데 생각해보니 id값도 자연수인데 Long타입을 사용하고 있었다. 원시 타입이 아닌 참조 타입을 사용하는 이유는 null값을 담기 위해서이다. 원시 타입인 int를 사용하면 값이 없을 때 0이 설정된다. 반면에 참조 타입인 Long은 값이 없으면 null을 담는다. 만일 값이 없을 때 0을 담게 되면 값이 들어..

221028 TIL REST API URI설계 [내부링크]

오늘은 글 작성 기능 구현을 목표로 작업 설계를 시작했다. 글 쓰기에 대한 인수 테스트 작성부터 하고 useForm을 이용해서 글 작성 폼을 만드는 것을 먼저 하는 것으로 순서를 잡았다. 글 작성시작성 시 기본적으로 필요한 내용으로는 글 제목, 글 내용, 카테고리 선택 그리고 사진은 선택사항으로 계획했고 글 작성 페이지의 URI는 write로 정했다. 그래서 REST API 설계 시에도 게시글 작성 시 URI를 POST /write로 정했었다. 그런데 REST API 설계 시에 규칙이 있다는 것을 알게 되었고, 내가 사용한 write가 동사형태라 설계 규칙에 위반되었기 때문에 /post로 바꿔야 했다. REST API URI설계시 유의할 점 URI는 정보의 resource(자원)를 표현해야 한다. 1. ..

221027 TIL 게시글 출력하기 (feat. SQL 예약어 Like) [내부링크]

작업설계 어제 프론트엔드 세팅을 끝냈기 때문에 오늘 시작을 백엔드를 세팅하는 작업으로 하루를 시작했다. 작업을 시작하기 전에 설계를 먼저 하는 원칙이 있었기 때문에 세팅하는 작업도 먼저 간단하게 설계(?) 아닌 설계를 먼저 해봤다. 우선 기본적으로 강의에서 배웠던 것을 떠올리며 7가지 dependencies를 추가해주고 스프링이 제공해주는 security도 사용하지 않을 거라 로그인 폼을 막는 세팅도 해줘야 한다. 아무튼 백엔드 세팅을 스토리 포인트로 2 뽀모로 잡았는데 1뽀모하고 조금 지나서 기본 세팅을 다 끝낼 수 있었다. 이제 본격적인 작업이 시작하는데 맨 처음 구현해야 할 기능이 전체 게시판(홈 화면)을 읽을 수 있도록 하는 것이었다. 역시 이 작업도 시작하기 전에 설계를 먼저 했다. 일단 전체 ..

221026 TIL KiCK OFF [내부링크]

어제 피드백을 받고 수정한 기획안을 바탕으로 다음 스프린트(다음 주 월)까지 구현해야 할 기능 리스트와 얼마 큼의 시간을 투자하고 구현할 수 있는지 스토리 포인트를 매겨보는 시간을 가졌다. 다음 주 스프린트까지 구현해야 할 기능을 정하는데 내 서비스 중에서 가장 핵심 기능부터 구현해야 했다. 그래서 커뮤니티 서비스의 핵심이 게시글을 읽고 쓰는 것이라 생각해서 게시물을 읽는 것을 가장 먼저 구현해야 할 기능으로 잡았다. 그리고 해당 기능의 스토리 포인트 점수를 매기는데 스토리 포인트 점수를 매기는 기준을 1 뽀모(40분/10분/10분)를 이용해서 잡았는데 생각보다 기능 하나를 구현할 때 몇 뽀모가 필요한지 측정하기가 쉽지 않았다. 기능 하나를 대강 기준을 잡고 그 기준을 이용해 다른 기능들을 구현하는데 상..

221025 TIL 무료 api를 이용해서 데이터 가져오기(feat. RapidAPI) [내부링크]

오늘은 어제 작성한 사용자 스토리와 태스크들을 피드백을 받았다. 사용자 스토리는 잘 작성했는데 태스크는 태스크를 보고 개발을 단계별로 진행할 수 있는 상태가 되야하는데 내가 쓴 태스크는 너무 포괄적이라서 더 세분화 되어야 할 필요가 있다고 해주셨다. 그리고 구현해야할 기능 중 채팅 기능이 있었는데 그냥 상대방과 1:1로 채팅을 하는게 전부인 기능이라 채팅을 하는 목적이 없다는 피드백을 받았다. 그래서 실시간 채팅을 이용해서 실제 축구 경기가 진행되고 있을때 실시간으로 응원 메시지를 남길 수 있는 기능을 만들기로 했다. 아래와 같은 페이지 처럼 구현이 될것 같은데 그러기 위해서는 채팅 기능 뿐만 아니라 해당 경기에 대한 데이터가 필요했었다. 프리미어리그의 경기 일정이나 정보를 얻어오는 방법에 대해서 알아봤..

221024 TIL 칸반 보드와 테스크 테이블 [내부링크]

오늘은 저번 주 한 주 동안 기획한 결과물을 공유하며 노아님에게 피드백받는 시간과 진짜 개발을 시작하기 위한 백로그 작성하는 방법을 배웠다. 우선 사용자 스토리가 가치 중심으로 작성이 되어야 하는데 나는 너무 포괄적인 스토리를 작성해 지적을 받았다. 빠르게 사용자가 특정 행위를 함으로써 얻을 수 있는 가치를 생각을 해보면서 사용자 스토리를 다시 작성했다. 그리고 백로그 작성은 Jira라는 프로그램을 공유가 되지 않는 이유로 이용하지 못해 깃허브 프로젝트를 이용하여 최대한 비슷하게 틀을 만들고 사용자 스토리를 바탕으로 테스크 테이블에 사용자 스토리와 백로그를 하나씩 작성하는 방법을 배웠다. 위 사진은 "관리자는 카페를 운영하기 위해 특정 멤버에게 스탭 역할을 부여 또는 해임할 수 있다."라는 사용자 스토리..

221023 TIL 디자인툴 사용해서 속도 높이기 [내부링크]

오늘은 손으로 그리던 UI를 빠른 작업을 위해 관리자 페이지는 피그마를 이용해서 그려봤다. 피그마라는 디자인 툴을 이용해 본적이 없어서 처음에 거부감이 들어 종이에 손으로 그렸었는데 동료들이 디자인 툴을 사용하는 걸 보고 접근성이 나쁘지 않다는 것을 뒤늦게 알게 되었다. 직접 사용해보니 간단한 기능들은 그림판 사용하듯이 쉽게 사용할 수 있었고, 손으로 그리면서 작업했던 시간보다 훨씬 빠르게 작업할 수 있었다. 진작에 디자인툴을 이용했으면 어땠을까 하는 후회를.. 하지만 허접한 그림실력으로 직접 손으로 그리는 감성도 나쁘지많은 않았다.. 카페 운영 화면 카페를 기본적으로 운영할때 필요한 기능들이 있는 화면이다. 가입 방식이나 멤버 목록의 공개 여부를 설정할 수 있고 가입을 몇 번째로 했는지와 같은 이벤트도..

메가테라 17주차 주간회고 (프로젝트 1주차 회고) [내부링크]

17주 차 회고 메가 테라 17주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 새로운 시작 이번 주는 16주간 메타버스 공간인 zep에서의 온라인 교육을 마치고 성수 코딩 도장에서 2달간 프로젝트를 진행하기로 되었다. 온라인 교육을 받으면서 오프라인 교육에 대한 기대감을 갖고 있었기 때문에 성수 확실히 집에서 온라인으로 교육을 받는것 보다 오프라인으로 하는 게 집중하는 시간이 차이가 났고, 특히 더 좋았던 건 트레이너님이 매우 가까이 있으니까 아주 빠르게 피드백을 받을 수 있어서 좋았다. 그리고 기존에 만났던 동료들도 있지만 온라인으로만 만나던 동료들도 직접 보면서 다같이 한 장소에 모여서 공부를 하니까 한 주간 즐겁게 공부를 할 수 있었던 것 같았다. 하지만 아침 출근시간에 지하철을 타야해서 ..

메가테라 16주차 주간회고 [내부링크]

16주 차 회고 메가 테라 16주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 이번 주는 지난주에 대부분의 기능은 구현했기 때문에 디테일적인 부분과 전체적인 완성도를 높이는데 집중을 했던 것 같다. 특히 테스트 코드를 작성하는데 시간을 대부분 할애한 것 같은데 그 이유는 모킹에 대한 어려움을 겪었었기 때문이다. 강의에서 배운 대로 따라 해도 혼자 하면 생각보다 쉽지 않아서 모킹 하는 방법을 익히는데 시간을 많이 들였다. 근데 모킹을 하지 않아도 테스트가 가능하다는 것을 뒤늦게 깨달았다. 모킹 때문에 테스트 코드 작성이 어려우면 설계가 잘못되었을 가능성이 높다는 아샬님의 영상을 보고 컴포넌트 구조를 살짝 바꿨는데 모킹 없이 쉽게 테스트할 수가 있었다. page 컴포넌트에서 필요한 것들을 불러와 하..

221022 TIL 관리자 프로세스 구조도 만들기 [내부링크]

항상 주말마다 집 앞에 있는 카페에 가서 공부를 했었는데 오늘은 조금 귀찮더라도 성수 코딩 도장에서 어제 못다 한 관리자 페이지 UI와 프로세스 구조도를 작성하기로 마음먹고 출발했다. 좌 관리 홈 화면 / 우 멤버 스탭 화면 관리자 페이지를 그려보는데 처음에 생각했던 사이즈보다 안에 들어가야 할 내용들이 훨씬 많은데 자리가 없어 그리지 못했다. 그리고 손으로 직접 UI를 그리려고 하니까 생각했던 작업 시간보다 더 오래 걸리고 반복되는 디자인도 있어서 아무래도 관리자 페이지는 디자인 툴을 이용해서 작업해야 할 것 같다. 관리자 프로세스 구조도 그리고 오늘은 웹 프로세스 구조도를 그려봤다. 사용자의 프로세스와 관리자의 프로세스가 있어 한 번에 다 그리기에는 복잡해져서 그리기 어려울 것 같아 두 개를 나눠서 ..

221021 TIL 더 구체적으로 기획하기 [내부링크]

오늘은 어제 노아님이 기획 프로세스의 예시를 보여주시면서 기획을 어떻게 해야 하는지 큰 틀을 알려주셨다. 처음 해보는 기획이라 어떻게 해야 할지 갈팡질팡 하면서 무엇하나 제대로 되지 않고 진도도 나가지 않는 느낌을 많이 받고 있었는데 어제 설명을 딱 듣고 나니 당장 뭘 해야 할지 명확해졌었다. 그리고 지금까지 했던 기획을 살펴보니 지금까지 기획한 내용이 부족하다는 느낌과 너무 구체적이지 못하다는 것을 깨닫고 다시 UI 프로토 타입을 큰 종이에 그리기 시작했다. Mobile First 디자인을 하기 위해 우선 모바일 기준으로 UI를 그려나갔다. 커뮤니티 사이트를 만들어야 해서 사용자 페이지와 관리자 페이지를 만들어야 했는데 오늘은 사용자가 볼 수 있는 UI를 먼저 작성했다. 좌 전체 게시판 화면 / 우 메..

221020 TIL 무엇 하나 쉬운게 없는 하루(feat. JadenCase 문자열 만들기) [내부링크]

이번 주의 핵심은 프로젝트 기획이지만 오늘은 코딩 도장 시간에 자바스크립트로 풀지 못한 JadenCase문자열 만들기 문제에 대해 글을 쓰려고 한다. 사실 어제 자바로 풀었던 문제라서 오늘은 금방 풀겠지 생각을 하고 어제 풀었던 방법과 다르게 풀려고 시도를 했는데 결국 1시간 내에 풀지 못했다. 다른 동료들은 모두 제 시간에 푼 것 같았는데 혼자 풀지 못해서 저녁 먹고 나서 다시 코딩 도장 문제에 도전을 했다. 어제는 자바에서 split을 사용해 공백을 기준으로 나눠 푸는 방법을 사용했었는데 공백이 연속일 때의 조건을 생각하지 못해 애를 먹어서 오늘은 split을 사용하지 않고 풀 수 있는 방법을 모색했다. 문자열의 맨 처음 단어가 대문자이고 모든 단어는 서문자로 변환해야하는 문제였다. 일차적으로 한문자..

221019 TIL Python의 Django [내부링크]

2022년 10월 TIOBE Index사이트 기준 프로그래밍 언어 순위 1등인 python의 웹 프레임워크인 Django에 대해 알아봤다. 어떤 언어로 웹 사이트 개발을 해야 할지 검색을 해보면 python이 빠지는 곳이 없을 정도로 인기가 많다. 그리고 개발자가 맨 처음 작성하는 코드인 Hello, world를 나는 파이썬으로 작성했다. python을 학교 동아리에서 잠깐 배운적이 있어 정말 새로운 언어는 아니지만 이미 자바에 지배된 몸이라 python은 잊혀진지 오래다. Python python은 객체 지향 프로그래밍 언어이다. 그리고 인터프리터 언어이며 변수의 타입을 지정해주지 않아도 되는 동적언어이다. 인터프리터란, 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말합니다..

221018 TIL PHP 탐구하기 [내부링크]

웹페이지를 만들기 위해서는 어떤 언어를 사용해야 하는지 검색을 해보면 대표적으로 PHP가 나온다. 프로그래밍을 처음에 시작할 때 아무것도 모르던 시절에 PHP를 어디선가 얼핏 들어본 것 같은 기억이 있는데 그 PHP를 오늘 알아봤다. PHP(Hypertext Preprocessor) PHP는 대표적인 서버 사이드 스크립트 언어로 웹 개발에 적합하며 HTML에 내장될 수 있는 언어이다. 여기서 말하는 서버 사이드 스크립트 언어는 웹에서 사용되는 스크립트 언어 중 서버 사이드에서 실행되는 스크립트 언어(컴파일이 필요가 없는)를 말한다. PHP는 동적인 홈페이지를 만들기 위해 설계 되었고 Html안에 코드가 포함되어 다른 개발언어보다 빠른 개발 속도를 보여줄 수 있다. PHP코드 예제 그리고 동적 언어이기 때..

221017 TIL 만들고 싶은걸 만들자 (돌돌축) [내부링크]

프로젝트 기획 3일 차에 드디어 어떤 주제로 프로젝트를 진행할지 정해졌다. 사실 어제 결정했던 당근 마켓의 기능에 실시간 경매 기능을 더한 서비스로 진행하려 했었지만 오늘 성수 코딩 도장에 와서 기획하던 중 동료 한 분이 그래도 2달간 진행하는 건데 본인이 재밌고 관심 있는 걸로 진행하는 게 좋지 않겠냐는 말과 아이디어를 몇 개 던져주셔서 축구 관련 커뮤니티를 다시 하기로 마음을 먹었다. 돌고 돌아 축구로.. 노아님께서 축구 커뮤니티를 만들 거면 게시판이 팀별로 존재하고 그 팀 안의 선수별로도 게시판이 존재해서 선수가 이적하면 그 선수 게시판은 사라지고 누군가 새로 오면 새로운 선수의 게시판이 새로 생기는 식의 동적인 게시판 정도는 만들어야 한다고 말씀해주셨다. 그런 복잡도를 가진 게시판의 대표적인 예로..

221014 TIL 테스트기간동안 키운 메타인지 능력 [내부링크]

길다면 길고 짧다면 짧았던 2주간의 레벨테스트가 드디어 끝났다. 이전 8주 차 당시 3주 차로 이월을 크게 하고 나니까 이번 레벨테스트를 시작하기 전부터 레벨테스트에 대한 부담감은 가중되어 있는 상태였다. 이전과 똑같은 실수를 반복하고 싶지 않아 열심히 하는 것은 물론이고 내가 개발에서 사용하는 코드 중 모르는 게 나오면 직접 찾아보고 정리하면서 실험도 해보는 힘들지만 재미있었던 레벨테스트 기간이었다. 레벨테스트가 끝나고 이제는 개인 프로젝트에 들어간다는 말을 들었을 때는 왠지 모를 설렘 반 두려움 반이었다. 레벨테스트를 진행하면서 내 실력이 어느 정도인지 대강 짐작을 하고 있기 때문에 이 실력으로 개인 프로젝트를 잘 만들 수 있을까? 하는 두려움이 있었다. 하지만 테스트 기간 동안 느낀 건데 서비스 같..

221013 TIL @RequestBody vs @ModelAttribute [내부링크]

@ModelAttribute 어노테이션에 대해 알아보던 중 @ModelAttribute도 @RequestBody와 같이 client에서 보낸 데이터를 자바 객체로 변환시켜서 자바에서 사용할 수 있게 만드는 역할을 한다는 것을 알게 되었다. 똑같은 역할을 하는 것 같은데 어느 경우에는 @ModelAttribute를 쓰고 어떤 경우에는 @RequestBody를 사용하는지 궁금해졌다. 그래서 @ModelAttribute와 @RequestBody와의 차이점을 알아봤다. @ModelAttribute @ModelAttribute 어노테이션은 client가 보내는 HTTP parameter를 자바 객체에 바인딩하는 역할을 한다. form형태의 데이터나 url뒤에 붙어서 오는 쿼리 스트링 형태(/user? name=j..

221012 TIL 내 서비스는 믿을만한가? [내부링크]

오늘도 테스트 코드를 열심히 작성하던 중 초반에 비해 생각보다 테스트 코드를 많이 작성했다고 생각했었는데 동료의 테스트 코드 개수를 들어보니 다 작성하지 않았는데도 50개가 넘는다고 하셨다.. 잉??? 난 테스트를 다 작성한 것 같은데도 30개가 겨우 넘었는데 50개나..?? 분명 같은 웹페이지를 만드는데 테스트 케이스가 한 두개 차이가 아니라 무려 20개가 넘게 차이가 난다는 건 내가 빼먹고 하지 않은 테스트들이 존재한다는 거고 그 말은 테스트로 검증된 서비스가 아닌데도 완성되었다고 착각하고 있었다는 소리다. 그래서 다시 작성하지 않은 테스트들이 있는지 확인을 하는데 역시나 예외 케이스에 대한 테스트나 초반에 모킹에 대한 어려움 때문에 하지 않았던 테스트들이 존재한 것을 확인했다. 우선 예외케이스에 대..

221011 TIL 사소하지만 중요한 차이 [내부링크]

백엔드에서 회원가입 유효성 검사를 진행하기 위해 테스트를 작성하는데 해결이 되지 않는 문제가 있었다. 이름을 입력하지 않았을 때 오류 메시지가 잘 나오는지 테스트를 하는데 이름을 빈칸으로 하고 테스트를 해도 테스트가 통과가 되지 않는 상황이였다. 문제 상황 회원가입 시 이름을 입력하는데 빈칸이면 안되고 3~7글자 사이의 한글만 입력해야 하기 때문에 스프링의 @Valid어노테이션을 이용해 아래 같이 Dto클래스에서 유효성 검사를 진행했다. 그리고 이름이 빈칸일 때 테스트를 진행하는데 이름이 빈칸이면 "이름을 입력해주세요"라는 메시지가 나오게 했지만 밑에 오류 메시지를 보면 "이름을 다시 확인해주세요"라는 다른 조건(3~7글자 사이의 한글만 입력)이 틀렸을 때의 메시지가 나왔다. 그래서 @NotBlank와 ..

221010 TIL 자바스크립트 실력 높이기 [내부링크]

리액트를 하다가 보면 자바스크립트 문법을 틀려서 오류를 접하는 경우가 많다. 얼마 전에만 해도 객체로 리턴하는 값을 배열로 받으려고 했던 것과 push메서드를 사용해서 원본 배열을 변경해 발생한 오류 등등 여러 가지 자바스크립트 사용이 미숙해서 낭패를 겪은 적이 몇 번 있다. 그래서 이런 상황을 하루빨리 극복하기 위해 야심 차게 준비한 책이 있다. 얼마 전에 홀맨님이 2기분들에게 추천해준 자바스크립트 책인데 아무래도 나도 사서 공부해야 할 필요가 있어서 구매를 했다. 2장까지 읽은 상황인데 원래 책을 빠르게 읽지 못하는데 이 책은 생각보다 빠르게 읽고 있다. 며칠 전에 공부했던 호이 스팅이라는 개념도 나오고 원본 배열을 조작하면 안 되는 이유, 그리고 모르고 있었던 것들도 꽤나 있어서 재미가 있는 것 같..

221009 TIL 로그인이 된 줄 알았지.. [내부링크]

오늘은 아직 구현하지 못한 로그인과 회원가입 기능 구현을 목표로 시작했다. 로그인과 회원가입 기능을 맨 마지막에 구현하는 이유는 아샬 님이 맨 마지막에 인증 / 인가 처리하시기 때문에 작업의 흐름을 따라 하려는 것도 있지만 서비스에서 로그인 회원가입이 중요한 기능은 아니라고 판단이 되었고, 로그인 회원가입을 먼저 구현하면 내가 만든 서비스를 테스트용으로 이용할 때마다 로그인해서 이용해야 하는 번거로움이 있을 것 같아 제일 후순위로 밀어놓았다. 로그인을 구현하던 중 이제는 안만나면 섭섭한 친구인 오류를 마주했는데 오늘도 꽤나 애를 먹었다. 로그인이 당연히 데이터베이스안에 있는 아이디로만 로그인했을 때 로그인이 돼야 하는데 데이터베이스에 존재하지 않는 아이디로 로그인을 해도 로그인이 되는 이상한 상황이 되어..

메가테라 15주차 회고 [내부링크]

15주 차 회고 메가 테라 15주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 15주 차는 레벨테스트가 진행이 되었다. 이번 레벨 테스트는 2주간 진행되기 때문에 아직 레벨테스트가 끝나지 않았다. 이번 테스트의 주제는 "마카오 기프트"라는 쇼핑몰을 만드는 것이었다. 지난주차에 총복습을 하면서 만들었던 마카오 뱅크 서비스와 크게 다르다고 느끼지는 않아서 처음부터 막 이거 어떻게 만들어야 하지?라는 생각은 하지 않았다. 다만 저번 주에는 솔직히 테스트 코드나 문서작성 등 마카오 뱅크 웹페이지를 구현하는 것 이외에 다른 작업들을 조금 소홀히 했다면 이번 주는 2주간 진행되기 때문에 완성을 목표로 하되 다른 해야 할 것들도 놓치지 않고 진행하려 했다. 그러다 보니까 리액트에서 테스트를 위해 모킹 하는 ..

221008 TIL 호이스팅(hoisting)이란? [내부링크]

금요일에 2기분들 코딩 인터뷰 때 호이스팅이라는 개념에 대한 질문이 나왔다. 사실 호이스팅이라는 단어를 난생처음 들었는데 호이스팅이 면접의 단골 질문이라고 하셨다. 호이스팅이 뭔데 단골 질문일까?? 한번 알아보자 호이스팅(hoisting) 호이스팅을 간단하게 말하면 함수가 실행되기 전에 안에 있는 변수들을 범위의 최상단으로 올리는 것을 말한다. 자 백날 말하는 것보다 코드 한번 쳐보는 게 이해가 훨씬 빠르니 코드를 한번 보자 var number = 1; console.log(number); 자 위 코드에서 콘솔에 찍히는 값은 뭘까? 당연히 1이다. console.log(number); var number = 1; 그러면 위 코드에서 콘솔에 찍히는 값은 뭘까? undefined가 콘솔에 나오는 것을 확인할..

221007 TIL @ResponseBody, @RestController [내부링크]

어제 Dto클래스의 getter 메서드의 이름에 get을 뺐을때 발생했던 문제의 원인을 파악하기 위해 오늘 공부하고 정리한 내용이다. 우선 문제상황은 getter 메서드의 이름에 get을 뺐을때 그에 해당하는 값을 responseBody에 전달되지 않는 상황이다. 밑에 사진에서 원래는 id값도 전달이 되야하는데 Dto클래스의 getter인 getId 메서드의 이름을 get을 빼고 그냥 id로 바꾸고 실행한 결과값이다. @ResponseBody 그러면 responseBody에 대해서 먼저 알아봐야 할 필요가 있었다. 서버에서 클라이언트로 응답을 보낼 때는 데이터를 responseBody에 담아서 보내야 한다. 클라이언트에게 응답을 보내는 컨트롤러에서 @ResponseBody라는 어노테이션을 사용하면 자바의..

221006 TIL 돌다리도 두들겨 보고 건너라 [내부링크]

오늘 메인으로 구현했던 기능은 상품 주문 내역을 불러오는 기능인데 이전에 상품 내역을 불러오는 코드를 작성해놨기 때문에 비슷한 맥락으로 생각보다 금방 구현할 수 있었다. 순조롭게 상품 주문 내역에서 특정 주문 내역을 클릭 시 세부 정보를 얻어오는 기능도 구현하는데 주문내역의 id값만 받아오지 못하는 상황이 발생했다. 주문 내역의 아이디로 세부 정보에 접근하기 때문에 아이디 값을 받아오는 게 필요했는데 받아오지 못하니 세부 정보를 볼 수 없었다. 백엔드에서 dto로 id값을 전달하게 했는데 받아오는 값을 출력해서 확인해보면 id 빼고 모두 가져오는 것을 확인했다. 너무나도 아이러니하게 무조건 필요한 id값만 빼놓고 가져오니까.. 그래서 id를 생성을 하지 않는건가 생각을 했지만 주문 내역의 entity에 ..

221005 TIL 방법의 차이 [내부링크]

어제 구현했던 페이지네이션 기능을 뭔가 정석대로 구현하지 않은 것 같아서 아침부터 계속 눈에 밟히고, 이게 맞나 싶은 찝찝함을 갖고 있었다. 기능을 구현할때 그 기능을 구현하기 위한 코드의 방법은 여러 가지가 있겠지만 나는 정답이 있을 거라고 생각을 하고 있었다. 그래서 페이지 네이션이라는 기능을 구현해도 정답에 가까운 코드가 아니라고 생각을 했기 때문에 찝찜함이 남아있었다. 내 코드가 정답이 아니라고 생각한 이유는 지금까지 코드를 배울때 아샬 님의 강의를 보면서 배웠는데 내가 페이지네이션을 구현하기 위해 쓴 코드가 이때까지 아샬님이 작성했던 코드와 거리가 있었기 때문에 구현해도 구현한 것 같지 않은 느낌이 있었다. 근데 오늘 노아트레이너님의 말씀을 듣고 그 찝찝함을 좀 덜 수 있었다. 내가 원하는 기능..

221004 TIL Failed to create query.... [내부링크]

Failed to create query for method public abstract 오늘 만난 오류는 Failed to create query for method public abstract이라는 오류를 만났다. JPA Repository에서 특정 id값의 데이터를 가져오다가 만난 걸로 추정이 되는데 당시에 마주했을 때는 왜 이런 오류가 발생했는지 파악할 수 없었다. 에러 메시지도 전부 빨간 글씨여서 잠깐 당황을 했다... 이렇게 에러 메시지를 띄워주면 당황스럽다고요.. 파란색으로 어떤 코드가 잘못되었는지 알려주는 에러들은 그나마 추적해나가면서 해결할 수 있는데 위 에러는 불친절하게도 그런 게 없다.. 근데 자바도 내가 잘못했으니까 저러겠지.. 심호흡 한번 하고 에러의 원인을 알려주는 Reason부..

221003 TIL 문서는 네비게이션 [내부링크]

주말에 서버 배포하는 것과 문서를 작성하는데 시간을 사용해서 거의 진행을 하지 못했지만 오늘은 제대로 레벨테스트를 시작하는 하루였다. 저번 주부터 했어야 했던 프로그램을 만들면서 문서를 작성하는 연습을 저번 주에는 제대로 하지 않았었지만, 오늘은 내가 만들려는 것을 만들기 전에 문서에 api 스펙을 먼저 작성하면서 방향을 잡으니까 코드를 작성할 때 방향을 잃지 않는 느낌을 강하게 받았다. 문서가 하나의 네비게이션 역할을 해주고 있었다. 가끔 코드를 작성하다보면 다음에 뭘 해야 하지?라는 생각을 가끔 할 때가 있었는데, 오늘은 그런 일이 전혀 없었다. 왜냐하면 문서에 이미 뭘 해야 할지 작성을 다 해놔서 그거에 따라 하나씩 만들면 됐기 때문이다. 오늘의 목표는 상품 목록을 조회하는 기능을 구현하는것이 나의..

221002 TIL 거꾸로 로꾸거 [내부링크]

오늘은 저번 주에 하지 못한 TDD 스터디를 하고 왔다. 오늘 TDD시간은 저번주에 참여를 못한고 이번 주에 진행한 게 아쉬울 정도로 유익했던 시간이었다. TDD를 배운지는 오래된 것 같지만 제대로 사용하지 못하고 있다는 느낌을 항상 받았고, 그 느낌이 오늘 TDD시간에 책의 예제를 따라 몹 프로그래밍을 하면서 확신으로 바뀌었다. TDD를 처음 배울 때 작은 단위부터 내가 컨트롤할 수 있는 범위 안에서만 수정을 시작하면서 빠른 그린을 봐야 하는 것을 배웠는데, 오늘 내가 했던 방법들을 돌이켜 보면 작은 단위로 TDD를 하기보다는 리팩터링 할 때 중간 과정을 많이 뛰어넘고 하고 있었다. 그래서 리팩터링 하다 길을 잃어버리는 경우도 종종 있었다. 근데 오늘 몹 프로그래밍을 하면서 진짜 엄청 작은 단위부터 시..

221001 TIL 기억보단 기록을 [내부링크]

오늘은 기억을 하는 것보다는 기록을 해야 한다는 것을 뼈저리게 느낀 하루였다. 어제 리액트로 만든 마카오 뱅크를 배포하는 과정에서 고통을 받고 있다가 진님이 젭에 접속하셔서 도움을 요청했다. 진님과 오랜 시간 동안 많은 실험을 해보면서 리액트 앱 배포 문제를 해결을 할 수 있었다. 그래서 그 배포한 해결방안을 오늘 오후에 동료들에게 알려주는데 어떻게 했는지 중간 과정들이 하나씩 기억이 제대로 나지 않아 큰 도움을 주지 못했다. 어젯밤에 했던 것들이라 생각이 날줄 알았지만 막상 내가 남에게 알려주려고 하니 생각이 하나도 나지 않았다... 그래서 아 어제 기록 좀 해놓을걸이라는 후회를 함과 동시에 얼마 전에 들어갔던 이동욱 님의 블로그 제목이 기억이 났다. 기억보단 기록을 오늘부터 문제를 마주치면 깃허브 레..

220930 TIL 이름 짓기 [내부링크]

오늘 점심에 TDD책 읽어야 하는 분량도 다 읽었는데 시간이 좀 남아서 실용주의 프로그래머 책을 꺼냈는데 어떤 주제를 읽을까 고민하다 눈에 띄는 한 주제가 있었고 바로 읽기 시작했다. 주제는 "이름 짓기"인데 프로그래밍을 시작하면서부터 지금까지 네이밍은 여전히 어려운 부분이기 때문에 눈에 바로 띄었던 것 같다. 프로그래밍을 맨 처음 혼자서 유튜브를 보면서 배울때는 변수 이름 짓는 거는 제일 쉬웠다. 왜냐하면 그냥 내가 하고 싶은 변수명으로 적거나, 주변에서 많이 사용하는 축약어 같은 거를 남발했었고, 누군가 내 코드를 보며 리뷰를 해준적도 없었기에 변수의 이름을 짓는 게 중요한지 알려주는 사람도 없었기 때문에 변수명에 대한 고민은 한 적이 없었다. 하지만 네이밍이 중요하다는것을 인지하고 난 뒤부터는 프로..

메가테라 14주차 회고 [내부링크]

14주 차 회고 메가 테라 14주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 마카오 뱅크(최종_최종_진짜최종..) 이번 주는 마카오뱅크를 만난 첫 주부터 바래왔던 마카오뱅크의 최종본을 맛보는 한 주였다. 이번 주는 강의를 보고 학습을 하는 마지막 주였다. 그래서 이번 주의 과제가 이때까지 배운 모든 것을 활용하여 회원가입, 로그인, 잔액조회, 송금, 거래 내역 확인 등등 여러 가지 기능을 하는 마카오뱅크 웹 서비스를 만드는 과제가 주어졌다. 마카오뱅크의 최종 모습을 보고 처음 들었던 생각은 금요일 안에 다 완성할 수 있을까..? 였다. 그만큼 만들어야 하는 사이즈가 컸었는데 사실 어느 정도는 강의만 제대로 보고해도 커버가 가능한 수준이었고, 회원가입과 로그인 부분만 조금 신경 쓰면 만들 수 있..

220929 TIL 쿠키(Cookie)와 세션(Session) [내부링크]

오후에 과제를 진행하던 중 홀맨님이 지금 시점에서는 세션과 쿠키의 차이를 "명확히" 알고 있어야 한다는 메시지를 보고 나는 쿠키와 세션을 명확히 알고 있는지 잠시 생각을 해봤는데 아무래도 아닌 것 같다고 판단이 되어 쿠키와 세션에 대해 알아보려 했다. 그런데 내일 안에 과제를 마무리하는 게 목표라 과제를 하는 것을 잠시 멈추고 쿠키와 세션을 바로 공부하는 게 맞는 건지 과제를 다 하고 알아보는 게 맞는 건지 잠시 고민을 했지만, 며칠 전 노아님이 이제는 과제 제출에 중점이 되어서는 안 되고, 과제 제출하는 것은 기본이고 실력을 쌓는 게 중점이 되어야 한다는 말씀을 해주신 게 생각이 나서 하고 있던 과제를 잠시 멈추고 바로 쿠키와 세션을 찾아봤다. cookie 쿠키란 서버가 사용자의 웹 브라우저에 전송하는..

220928 TIL 풀스택 개발자로 가는 길 [내부링크]

백엔드와 프론트엔드의 경계 매번 프론트엔드와 백엔드를 독립적으로 배워서 이 둘의 경계가 어디인지 왜 나눠서 사용하는지 정말 애매했었다. 리액트만으로도 투두리스트나 마카오 뱅크가 만들어지고 스프링만으로도 만들어지는데 왜 나눠서 사용할까...? 이런 궁금증은 항상 갖고 있었다. 이번 주에 둘을 같이 사용하여 마카오 뱅크를 만들어 보면서 그 경계를 조금이나마 허물 수 있었다. 그리고 이번 주 강의만 봤을 때는 이 둘을 어떻게 연결시키는 건지 잘 이해가 되지 않았었는데 오늘 직접 해봄으로써 조금이나마 이해할 수 있었다. 입력 폼에 대한 예외처리를 하는 것을 직접 해봤는데 처음에는 어떻게 해야 할지 전혀 감이 잡히지 않아 헤매고 있었다. 백엔드에서 입력하는 폼에 대한 조건을 따져서 조건에 맞지 않으면 예외 메시지..

220927 TIL 놀랍다..! Pageable [내부링크]

오늘은 마카오 뱅크의 거래내역 조회 기능을 구현하다 pagination을 아주 간단하게 구현하는 유용한 기술을 발견했다. pagination은 게시판 같은 데서 흔하게 볼 수 있는 개념이다. 게시글의 수가 특정 개수를 넘어가면 다음 페이지를 클릭해서 이동이 가능하게 해주게 하는 것을 pagination이라고 하는데 이전 과제에서 이 pagination을 구현해야 했던 적이 있다. 어려서부터 컴퓨터를 사용할 때 특정 게시글수가 넘어가면 다음 페이지가 존재하는 것은 너무나도 당연하게 여겨져 왔던 사실이라 이것도 프로그래밍해서 만들어졌다는 것을 인지하지 못하고 있었는데 과제로 주어지고 막상 만들려고 하니까 너무 어렵게 느껴졌었고 구현하기 위해 조건식 막 만들고 엄청 고생했던 기억이 난다. 근데 그 고생을 왜 ..

220926 TIL 책은 미리미리 읽자 [내부링크]

드디어 드러난 마카오 뱅크의 실체 오늘은 드디어 마카오 뱅크의 최종 모습을 볼 수 있었다. 그리고 이때까지 배운 것을 총동원하여 마카오 뱅크 웹페이지를 만드는 게 최종 과제이다. 약 4달 전 마카오 뱅크를 처음 본 뒤 마카오 뱅크는 끝까지 함께한다던 트레이너님의 말을 듣고 충격을 받았었는데 드디어!! 마카오 뱅크의 실체를 볼 수 있었다. 몰아서 보지 말고 미리 읽자 주어진 마카오 뱅크 과제를 다 만들려면 이번 주 아주 빠듯하게 작업을 해야 한다고 판단되었다. 하지만 그 와중에 스스로 약속한 게 있다. 바로 TDD책을 하루에 한 챕터씩 읽는 것이다. 원래 저번 주 주말에 TDD 스터디에 참가해야 했는데 참석하지 못했다. 이유는 토요일 저녁이 되어도 주말 강의를 1번도 다 보지 못했고 TDD책 읽어야 하는 ..

220925 TIL 구멍이 송송 [내부링크]

오늘 하루 강의를 보면서 가장 많이 느꼈던 것은 내가 놓치고 넘어간 것들이 많다는 것이었다. 놓친 개념들이 많다 보니 복습하는 주간임에도 불구하고 새로 학습하는 기분이 들었다. 오늘 중점적으로 공부를 했던 부분은 mock을 이용한 테스트와 axios테스트 부분이다. 이전에 axios를 테스트하는 부분을 처음 배웠을 때 너무 어려워서 이해하지 못하고 강의에서 나온 형태 자체를 외우고 사용을 했었기 때문에 오늘 그 부분을 다루는 강의를 중점으로 봤다. 그리고 스프링에서 mock객체를 이용해서 테스트하는 부분도 이때까지 제대로 이해하지 않고 사용하고 있다는 것을 다시 한번 개념 정리하면서 깨달았다. 가짜 API 서버를 만들어서 테스트하는게 아직도 익숙하지 않아서 할 때마다 애를 먹고 있었는데 이번에 MSW라는..

220924 TIL 당황하지마 언제나 쉬운건 없었어 [내부링크]

오늘 아침에는 평소 주말에 일어나는 시간보다 눈이 일찍 떠져서 일어난 김에 어떤 강의가 올라왔는지 확인만 하고 조금만 더 자려고 했지만 강의 페이지를 보자마자 잠이 확 깨버렸다. 꿈을 꾸고 있는 건지... 눈이 안 좋아져서 강의가 여러 개로 보이는 건지 강의 리스트가 어마 무시했다. 총정리 주간이라 어느 정도 양이 있을 거라고는 생각했지만 이 정도일 줄을 상상도 못 했다.. 하지만 이제는 한 주가 지날수록 배우는 양이나 난이도가 급상승하는 건 익숙해져 있던 터라 당황하지 않고 (사실 오늘은 많이 당황하긴 했는데..) 자리에서 일어나 강의를 볼 준비를 했다. 평소에는 주말에 강의를 시간 분배를 하면서 계획적으로 보는 편이었는데 오늘은 그럴 여유도 없이 강의를 바로 보기 시작했다. 총 정리 주간이라서 완전히..

220923 TIL 자신감을 갖자 [내부링크]

코딩 인터뷰 시간에 받은 지적 중 하나가 말할 때 너무 자신감이 없다는 것이다. 질문에 대해 답을 할 때 내가 맞는 답을 말하는지 확신을 갖지 못하니까 쭈굴이 모드로 변해서 자신감 없는 모습이 나왔던 것 같다. 내가 말하는 게 맞든 틀리든 자신감 있게 대답을 하는게 중요하다고 말씀을 해주셨다. 피드백을 받은 이후에 다음 질문은 맞든 틀리든 최대한 자신감 있게 내가 생각하는걸 말을 하니까 조금 괜찮아졌다는 말씀을 해주셨고 스스로도 쭈굴이 모드로 말하던 때랑 달라졌다는 걸 체감할 수 있었다. 내 차례가 끝나고 이전부터 글을 잘 쓰신다고 생각했던 동료분이 인터뷰하시는 걸 보는데 확실히 나와 다르다는 것을 느꼈다. 동료분이 인터뷰하는 걸 보면 나와 달리 질문에 대한 답과 상관없이 말을 하실때 목소리에 힘이 들어..

메가테라 13주차 회고 [내부링크]

13주 차 회고 메가 테라 13주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 내가 아는 리액트는 리액트가 아니었다.. 이번 주는 저번 주의 연장선인 리액트를 이어서 배웠다. 저번 주에 리액트를 배우고 마카오 페이라는 퀘스트를 만들면서 재미있었기 때문에 이번 주도 재밌는 한 주가 되겠구나 생각을 했다. 하지만 3번째 강의를 접한순간부터 내가 저번 주에 배웠던 리액트는 장난이었다는 것을 깨닫게 되었다... api에서 받아온 데이터를 테스트할 때 mock을 이용해 테스트하는 여러 가지 방법, Flux Architecture의 store개념, Pub-Sub 패턴의 구독하는 이유와 구독을 끊는 이유 등등 이해하기 어려웠던 개념들이 넘쳐났고, 그 개념을 바로 적용해서 간단한 게시판을 만드는데 그 과정이 ..

220922 TIL 소리를 들려줘.. [내부링크]

월요일에 뽀그로 타이머 퀘스트를 보고 기본적인 요구사항조차 완성시킬 수 있을지 의문을 가진채 시작을 했는데 오늘 드디어 작동을 하는 타이머를 겨우 만들었다. 하지만 아직 끝난 게 아니다.... 진짜 어떻게든 작동하는 게 목표였기 때문에 코드가 개판인 게 내 눈에도 보인다... 그리고 나만의 기능도 만들어야 하고, 타이머 시간이 끝나면 알림음도 나게 해야 하는데 오디오가 들어가지 않는다... 시간이 딱 지나면 오디오가 재생이 돼야 하는데 재생이 되지 않고 밑에 에러가 나온다. Uncaught (in promise) DOMException: The element has no supported sources. 위의 에러 메시지를 구글링 해서 나오는 해결방법들을 여러 가지 시도를 해봤지만 소득이 없었다. 1. ..

220921 TIL 목표는 완성하기 [내부링크]

뽀그로 타이머 과제 리뷰 중 useState로 상태 값을 관리하던 것을 store에서 관리해야 한다는 리뷰를 받았다. 즉 Flux Architecture를 직접 적용해야 할 때가 왔다는 뜻이다. 이번 주 강의를 들으면서 가장 이해가 안 되고 어려웠던 Flux Architecture.... 그리고 추가로 구독이라는 개념이 나오면서 Pub-Sub패턴도 배웠는데 이것 또한 이해하기가 쉽지 않았다. 일단 내가 지금까지 내가 이해한 Flux Architecture에 대해 먼저 정리해보자. Flux Architecture 우선 Flux Architecture는 MVC패턴의 한계를 해결하기 위해 등장한 아키텍처라고 한다. MVC패턴은 데이터 흐름이 양방향이기 때문에 애플리케이션의 복잡도가 높아 확장하기가 어렵다. 반..

220920 TIL JUST DO IT! [내부링크]

일단 하자 어제 퀘스트를 거의 진행하지 못했었다. 어디서부터 어떻게 진행해야 할지 몰랐고, 어떻게 저 기능을 구현해야 하지?라는 막막함이 아무것도 진행할 수 없게 만들었다. 그래서 어제는 강의를 한 번 더 듣는 시간을 가졌지만 오늘은 나름 퀘스트 진행이 되고 있다. 어제 강의를 한 번 더 들었다고 오늘 퀘스트를 어떻게 할지 감이 잡힌 건 아니었다. 하지만 어제와 오늘의 나의 차이는 오늘도 아무것도 못한 채 생각만 한다면 큰일 날것 같아서 일단 시작하는 거였다. 어제처럼 전체적인 완성된 그림을 생각하고 어떻게 그려나가야 할지 방법을 먼저 생각하고 시작하는 게 아니라 진짜 작은 부분, 내가 만들 수 있는 부분부터 차근차근 하나씩 만들어 갔다. 차근차근 하나씩 만들다 보니 "아! 이것도 필요하겠다. 그러면 저..

220919 TIL 쉬운게 없는 하루 [내부링크]

요즘 들어 뭐 하나 쉬운 게 없어서 하루의 목표를 세우면 그 목표를 제대로 완료하는 게 없는 상황이다. 오늘 올라온 코딩 도장 문제도 혼자 풀고 싶었지만 시간이 오래 지나도 못 풀었다. 지금 강의 인출도 제대로 되지 않고, 퀘스트도 시작도 못한 마당에 이걸 붙잡고 있는 게 맞는 건가? 생각이 들어서 풀이 방법을 찾아서 제출을 하긴 했다. 강의 인출도 오늘 제대로 하지 못했다. 6시 안에 제출해야 한다는 마감시간이 있었지만 그 시간을 지키지도 못해서 강의 반복 과제도 일단 강의를 보면서 따라친것을 제출했다. 우선 항상 트레이너님이 강조하시는 마감시간을 지키기 위해 어떻게든 제출은 하고 있지만 이렇게 하고 있는 게 맞는 건지 혼란스럽고 답답했다. 능동적으로 뭔가 해내는 게 없다는 사실이 의욕을 자꾸만 꺾이게..

220918 TIL React 우리 좋았잖아.. [내부링크]

내가 알던 리액트 맞니? 주말에 강의를 보면서 오랜만에 강의 난이도에 매우 당황을 했다. 이전에 마카오 뱅크의 Transaction을 제대로 이해하지 못해서 Transaction 때문에 힘들었던 이후로 오랜만에 나를 당황케 하는 강의의 난이도였다. 내가 알던 리액트가 맞나 싶을 정도로 이번 주에 배우는 리액트에 대한 내용이 이해하기가 쉽지가 않았다. 그러다 보니 자연스럽게 강의를 보면서 스페이스바를 눌러서 멈추거나 다시 5초 뒤로 가는 일이 잦아지면서 한 강의를 보는데 시간이 생각보다 더 많이 소비되기도 하고.. 이해가 잘 안 되니 일단은 따라 치기라도 해 보자라는 심정으로 강의를 따라 치는데 분명 똑같이 따라 쳤다고 생각했는데 어느 순간 내 코드는 동작을 하지 않고... 강의를 이해한게 아니라 어디가 ..

220917 TIL 일급 객체?? callback함수?? 내가 뭐라고 했더라? [내부링크]

이번 주의 학습 키워드 중 하나인 callback 함수에 대해 알아보자 사실 콜백 함수는 자바스크립트를 배우면서 여기저기서 자주 듣던 용어이다. 하지만 오늘 콜백 함수라는 학습 키워드를 봤을 때 정확한 개념은 모르고 있는 것 같다는 느낌을 강하게 받았다. 이번 주의 학습 키워드인 만큼 제대로 알기 위해 콜백함수에 대해 정리를 하자. 콜백 함수를 알아보기 이전에 콜백함수를 검색하면 일급 객체가 연관돼서 많이 나오는데 일급 객체부터 살펴보자 사실 일급 객체도 처음 듣는 개념이 아니라 자바스크립트를 처음 배울때 학습 키워드로 나왔던 개념이다. 심지어는 코딩 인터뷰시간에 일급 객체에 대해 질문받았던 게 기억이 난다... 그때 제대로 답을 했던가?? 내 기억상으로는 횡설수설한거 같은데 이제는 제대로 머릿속에 박아..

메가테라 12주차 회고 [내부링크]

12주 차 회고 메가 테라 12주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 또 만났다 React!! 12주 차는 리액트에 대해서 배웠다. 리액트를 9주 차 때 처음 배웠는데 그때 리액트를 배우고 너무 어려워서 쩔쩔맸었던 경험이 있어서 리액트에 대한 두려움이 있었던 상태였다. 9주 차에 리액트를 배우긴 했지만 머릿속에 남는 게 없는 느낌이라 이번 주에 잘할 수 있을까 걱정을 했지만, 다행히도 12주 차에는 추석 주간이 껴있어서 2주 정도 리액트를 공부할 수 있었다. 리액트로 간단한 ToDo List를 하루에 한 번씩 만들면서 2주간 최소 ToDoList를 10번 이상 만들면서 엄청난 반복학습을 한 결과 리액트에 대한 두려움이 "리액트 생각보다 재미있는데?"로 바뀌게 되었다. 처음 한 두 번 리..

220916 TIL React 장점 살려 사용하기 [내부링크]

컴포넌트 재사용 하기 리액트로 마카오 페이 기능 구현중 버튼에 들어가는 이름만 다르지 똑같은 형태인 버튼 컴포넌트가 여러 개가 존재하는 일이 발생했다. 리액트의 장점 중 하나가 컴포넌트 기반으로 이루어져 있기 때문에 코드의 재사용성이 좋다는 건데 그 장점을 전혀 활용하지 못하고 있었다. 이름만 다른 똑같은 형태의 컴포넌트가 존재하면 범용적인 컴포넌트를 하나 만들어서 이 컴포넌트를 재사용하는 게 좋다는 리뷰를 받았다. 근데 하나의 버튼 컴포넌트가 어떤 이름이 들어오는지 어떻게 알게 할 수 있을지 생각을 해봤다. 상위 컴포넌트가 하위 컴포넌트로 데이터를 주는 props를 이용하면 될 것이라고 대충 짐작하고 시작했다. 그래서 처음에는 name이라는 props를 만들어서 하위컴포넌트에 전달해주는 방법을 사용했다..

220915 TIL 목표는 구체적으로 [내부링크]

일주일간 퀘스트를 하나만 진행하는데도 아직까지 못 끝냈다는 사실에 오늘은 다소 마음이 급해진 상태로 시작했다. 그러다 보니까 모든 기능을 다 구현하고 css작업을 시작해야 하는데 빨리 css 해야 할 것 같은 마음에 css 건드렸다가 나만의 메뉴 건드렸다 정신없이 퀘스트를 진행했다. 결국에는 아직까지 둘 다 제대로 완성하지 못했다. 나만의 메뉴는 최소한의 기능만 구현하긴 했는데 너무 부실한 느낌이라 보완해야 함을 느꼈고, css는 금방 할 줄 알았지만 생각대로 되지 않았다. 진행하고 있는 작업에 대해 목표가 없이 진행하다 보니까 하나도 제대로 완성하지 못하고 이도 저도 아닌 상태가 된 것 같다. 단순히 나만의 메뉴 완성하기, css 적용하기 같은 추상적인 목표는 전혀 도움이 되지 않는다는 것을 깨달았고,..

220914 TIL forEach(), map() 그리고 filter() [내부링크]

어젯밤에 자바스크립트를 자바처럼 사용하고 있다는 이야기를 해주셨다. 아직까지도 자바스크립트가 익숙하지 않아서 그런 것도 있지만 4개월 정도 주구장창 자바만 작성하던 몸이라 그런지 자바스크립트로 어떻게 코드를 작성해야 할지 모르겠을 때 본능적으로 자바에서 썼던 방법을 쓰려했던 것 같다. 그리고 자바스크립트에서는 for를 쓸 일이 없다는 이야기를 듣고 놀랐다. 사용하기 단순해서 제일 많이 사용하는 for문을 쓸 일이 없다니.. 그럼 뭐를 사용해야 하는 의문과 동시에 바로 해결방안을 말씀해주셨다. 자바스크립트는 forEach, map, reduce 이 3개만 제대로 사용하면 대부분 해결이 가능하다고 하셨다. 하지만 저 3개 중 제대로 사용할 수 있는 건 단 하나도 없었다. 저 3개 중에 그나마 map을 tod..

220913 TIL 레벨1이지만 레벨1같지 않은 문제 [내부링크]

프로그래머스 레벨 1 문제 중 가장 낮은 정답률을 가진 신고 결과받기 문제를 이틀 연속 풀고 있다. 밀리면 안 된다는 걸 알지만 나에게 이 문제를 풀기가 쉽지 않았다. 분명 한번 풀었던 문제인데 어떻게 풀었는지 전혀 생각이 나지 않았고, 마치 처음 본 문제 같았다. 월요일에 처음 풀기를 시도했을 때 30분간 삽질하다 HashMap을 써야 한다는 것을 뒤늦게 깨닫고 시도를 했지만 레벨 1의 최고 보스답게 좀처럼 풀리지 않았다. 결국에는 시간 내에 풀지 못해서 저녁에 다시 재도전했지만 풀지 못했다. 오늘은 신고 결과받기 문제를 자바스크립트로 풀어야 했다. 자바로도 못 풀었는데 자바스크립트로 풀었을 리가.. 더 이상 코딩 도장 문제가 밀리면 안 돼서 오늘은 어떻게든 풀어야 했다. 우선 요구사항부터 다시 천천히..

220912 TIL 꼼꼼해지기 [내부링크]

체크리스트 만들기 12주 차의 퀘스트인 마카오 페이를 처음 봤을 때 요구사항이 많아 약간 쫄았다.. 하지만 일주일간 갈고닦은 react를 활용할 수 있는 기회라 설레기도 했다. 퀘스트 요구사항이 많아서 안 잊어버리게 체크리스트를 만들었다. 왜냐하면 저번에 빈틈없는 회원가입 퀘스트를 진행할 때도 요구사항이 많았었는데 그때 요구사항 몇 개를 빼먹은 적이 있었다. 머릿속으로 다 한 줄 알았지만 내 머리가 나빠서... 퀘스트의 기본적인 요구사항에 대한 리뷰를 받은 적이 있어서 이번에는 최소한 기본적인 요구사항은 놓치지 않기 위해 눈으로 확인하고 체크할 수 있는 체크 리스트를 만들어서 진행했다. 체크리스트를 만들었을 때의 이점은 요구사항을 빼먹은 게 없는지 확인하는 것뿐만 아니라 작업 단위로 커밋할 때도 매우 유..

220910 TIL 인간은 망각의 동물이다. [내부링크]

코딩 테스트 문제를 풀다 중복을 제거할 일이 생겼었는데 분명 며칠 전에도 코딩 테스트 풀면서 중복 제거할 일이 있어서 중복 제거하는 방법을 찾고 사용까지 했었던 기억이 났었는데 오늘 다시 하려니까 생각이 1도 나지 않았다. 인간은 망각의 동물이라는 것을 다시 한번 깨닫게 되는 순간이었다. 그 당시에 중복제거 방법을 찾아보고 사용만 했었지 따로 정리를 하거나 추가적으로 더 공부하지 않았었다. 그래서 그런지 중복 제거했었던 것만 기억이 나고 어떻게 하는지는 모르는 상황이 발생했었다. 몰라서 찾아보는 것까지는 좋았지만 내 것으로 만들지 못해 결국에는 안 찾아본 것과 똑같은 결과를 초래했다... 잊어버리지 않게 한번 더 공부하고 정리하는 JS에서 배열 중복 제거하는 방법 Set 이용하기 set은 중복되는 데이터..

220908 TIL 나태함은 극복하는 거야 [내부링크]

잊을만하면 찾아오는 나태함 과정을 쉬면서 9시까지 출석하지 않아도 돼서 좋기도 하지만 9시까지 일어나지 않아서 점점 나태해지는 느낌을 받았다. 그리고 강제적인 시간표가 없다 보니 집에서 공부하다 보면 공부하는 시간과 쉬는 시간이 규칙적이지 않아 쉬는 시간이 길어지는 경우가 종종 있었다. 어떻게 하면 이 나태함을 극복할 수 있을까 생각하다 나는 익숙하고 편안한 환경에서 공부하는 것보다 불편한 환경에서 공부가 더 잘되는 걸 알기에 쉬는 날 동안에는 최대한 나가서 공부를 하려 했다. 장소는 두 군데로 낮에는 스터디 카페, 오후에는 카페를 가서 공부 했다. 스카에서 졸고 있는 나를 발견하면 바로 일어나서 장소를 바꿔 카페를 가기도 했다. 나름 쉬는 날 동안 나만의 루틴을 잘 따라서 공부해왔는데 오늘의 나는 나태..

220907 TIL useState의 편리함 [내부링크]

이전에 react를 처음 배울 때 useState, useEffect 등등 여러 가지 개념이 많이 나왔었는데 사용법도 제대로 못 익히고 아샬님이 하는 대로 무지성으로 외우고만 넘어갔었는데 이번에 어떻게 작동하는지 왜 사용하는지 알기 위해 여러가지 실험을 해봤다. 우선 오늘은 useState에 대해서 공부를 했는데 useState를 왜 쓰는지 알기 위해서 useState를 사용해서 만든 것을 useState를 안 사용하고 만들어 보기로 했다. 너무 복잡한 건 힘드니까 아주 간단한 기능인 버튼을 눌렀을 때 버튼을 누른 횟수만큼 count가 증가하는 것을 만들어봤다. 즉, useState를 사용하지 않고 상태 값이 변화하는 것을 화면에 바로 보는 것을 목표로 했다. 어떻게 하면 setState 같은 값을 주지..

220906 TIL 굳이 찾아보기 [내부링크]

자바스크립트 숙련도 높이기 이번 주 react강의를 보고 스스로 인출하다 보면 react를 몰라서 막힐 때 반, JavaScript를 몰라서 막힐 때가 반이었다. 아니 이번 주는 react를 배워야 하는데 자바스크립트 때문에 자꾸 막 하니까 현타가.. 저번에 JavaScript문법을 학습할 때 대충 한 것인지 아니면 자바스크립트를 아직 많이 사용을 안 해서 그런 건지.. 아직까지 자바스크립트가 너무 어렵게 느껴진다. 제발 후회하지 말고 할 때 제대로 배우자.... 이번 주는 그래도 자바스크립트를 다시 복습할 수 있는 황금 같은 시간이 있기 때문에 다음 주에는 자바스크립트 때문에 애먹는 일이 없도록 자바스크립트의 숙련도를 높이는 것을 목표로 삼았다. 뭐든지 숙련도를 높이기 위해서는 반복이 가장 중요하다고 ..

220905 TIL getById() vs findById() [내부링크]

금요일 코딩 인터뷰 시간에 받았던 질문 중 제대로 대답하지 못했던 질문인 findById와 getById의 차이점을 알아봤다. getById 우선 getById()는 Spring Data JPA 2.7.2부터 Deprecated 되고 getReferenceById()로 변경이 되었다. - getById() 이전에 getOne()이었다는 사실이.. intelliJ에서도 getById을 사용하려고 하면 getReferenceById를 사용하라고 하는 걸 볼 수 있다. getReferenceById에 대한 설명을 살펴보자 뭐 영어로 샬라샬라 하는데 부족한 영어실력으로 핵심만 간단하게 해석해보자면 "매개변수로 전달된 ID에 해당하는 entity를 리턴하고 없을 경우 예외를 발생시킨다." id가 null일 수는 ..

220904 TIL Stack을 활용해보자 [내부링크]

원래는 금요일에 풀었어야 했던 금요 코딩 테스트 문제인 프로그래머스 크레인 인형 뽑기 문제를 오늘 해결했다. 금요일에 풀지 못했던 이유는 오늘 풀었던 방법인 push와 pop을 몰라서 다른 방법으로 풀다가 시간이 오버돼서 못 풀었다. 분명 push와 pop을 안 써도 풀 수는 있겠지만 금요일의 나는 그걸 하지 못했고... 금요일에 삽질을 너무 많이 해서 풀기 싫어서 계속 미루다가 오늘은 어떻게든 풀어낸다는 마음으로 시작했다. 금요일에 풀었던 방법에 문제가 있다고 생각해서 이전에 풀었던 방법들은 다 지우고 처음부터 했다. 여러 가지 방법을 모색하던 중 Stack이라는 새로운 개념을 접했고 stack을 적용해서 풀 수 있었다. Stack 우선 Stack이란 마지막에 저장한 데이터를 가장 먼저 가져오는 LIF..

220903 TIL 과제를 바라보는 시선과 마음가짐 [내부링크]

노아 트레이너님이 올려주신 글을 보고 나는 과제를 어떻게 하고 있는지 되돌아보게 되었다. 스스로 요구사항에 빠진 부분이 있는지 생각해 본 적이 있는지, 셀프 리뷰를 꼼꼼히 하고 있는지 일단 둘다 제대로 하고 있다고 자랑스럽게 말할 수 없다. 셀프 리뷰는 한다고 하는 게 형식적으로 마지막 빈 줄이 빠졌는지 확인하는 것과 cmd + option + L / control + option + O 하는 게 전부이다. 코드를 다시 살펴본 적은 손에 꼽는다. 그러면 내가 만든 프로그램에 애정을 갖고 만들고 있는가..? 아니다. 과제에 대한 애정은 눈 씻고 찾아봐도 볼 수 없고 아직도 과제를 해결해야 한다는 존재로 보고 있다. 오늘 3기분이 올린 til을 보다 스스로 정말 잘 만든 과제라고 말하시는걸 보고 대단하다고 ..

메가테라 11주차 회고 [내부링크]

11주 차 회고 메가 테라 11주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 잊고 있었던 코딩의 재미 이번 주는 몇 주간 느끼지 못했던 코딩의 재미를 느끼면서 보냈던 한 주였다. 어디서 재미를 느꼈는지 곰곰이 생각을 해봤는데 나는 뭔가를 만들 때 재미를 많이 느끼는 편이었다. 코딩에 재미를 느끼고 이 과정에 신청하게 된 첫 번째 계기도 무에서 유를 창조하는 것같이 코딩이 아무것도 없는 것에서 프로그램을 만든다는 사실이 나를 프로그래밍 세계로 이끌었고 이후 직접 간단한 홈페이지를 만들면서부터 제대로 배워보고 싶다는 생각을 했었다. 근데 매주 퀘스트를 하면서 뭔가를 만드는데 왜 이번 주에만 유독 재미를 느꼈는지 생각을 해봤는데 아마 적절한 난이도 때문이었던 것 같다. 이전 주까지는 솔직히 퀘스트 ..

220902 TIL 마인드 컨트롤 하기 [내부링크]

늘어지지 않기 오늘은 하루를 끝냈다는 사실이 다른 날들 보다 더 기쁘게 느껴지는 날이다. 그 이유는 다음 주 한 주는 추석이 껴있기 때문에 강의만 올라오지 공식적인 출석이나 퀘스트를 하지 않아도 되기 때문이다. 메가 테라 과정이 진행된 지 이제 약 4개월 정도 지났는데 쉴 새 없이 달려왔다. 과정을 진행하면서 중간중간 하루 정도는 쉬고 싶다는 생각을 계속해왔었는데 한 주간 과정을 쉬어간다는 사실에 솔직히 좋았다. 하지만 다음주 한 주간 늘어지지 않도록 최대한 마인드 컨트롤이 가장 필요한 시점인 것 같다. 쉬고 싶기는 하지만 지금 상황이 쉬고만 있을 수 없는 상황이라는 것을 느끼고 있기 때문이다. 저번 주, 오늘 진행된 코딩 인터뷰 시간에서 확인된 무지한 개념 상태와 당장 오늘 올라온 리액트 사용법, 자바..

220901 TIL 한발짝 멀리서 살펴보기 [내부링크]

오후에 게시판을 만들던 중 이유 모를 문제 때문에 1시간 넘게 헤멨었다. 하지만 이유 없는 문제가 어디 있겠는가..? 컴퓨터는 거짓말하지 않는다는 것을 코딩하면서 뼈저리게 깨달았고... 분명 내가 뭔가 잘못했으니까 컴퓨터가 너 틀렸어 작동 안 시켜줄 거야라고 하지 않았을까? 한 문제를 1시간 넘게 보면서 틀린 그림 찾기 하는 거 마냥 뭐가 문제인지 찾는데 아무리 찾고, 고쳐도 해결이 되지 않아 잠시 정신을 잃을 뻔했다. 이대로는 시간만 쓰고 문제도 못 풀고 진전이 없겠다 싶어서 잠시 휴식을 취하고 맑은 정신으로 문제를 해결하려고 했다. 아까는 오류 메시지에서 문제가 일어났다고 보여주는 파란색 코드 부분만 확인을 계속했었는데 이번에는 그냥 전체적으로 로직 순서를 따라가면서 천천히 다시 코드를 봤다. 그랬더..

220831 TIL 작업 단위로 커밋 하기 [내부링크]

오늘 빈틈없는 회원가입 퀘스트를 리팩터링 하기 위해서 기존에 내가 작성한 회원가입 시 예외처리 부분만 다 지우고 예외처리를 새로 작성하고 싶었는데 고쳐할게 많아서 불필요한 코드를 지우다 지우면 안 될 것까지 같이 지우면서 불필요한 에러를 해결하다 시간을 소비했다. 나는 예외처리 시작하는 딱 그 시점에서 다시 작업을 시작하고 싶었는데 그 시점에 돌아갈 방법이 없었다. 왜냐하면 나는 commit을 작업단위로 하지 않고 구현해야 할 기능을 다 구현했을 때 1차 커밋을 했기 때문에 돌아갈 곳이 없었다. 커밋끼리 간격이 거의 하루.. 그래서 이런 불편함을 해결하고자 다음 퀘스트는 커밋을 작업 단위로 해서 최대한 save포인트를 많이 만들어서 돌아갈 길을 많이 만드는 중이다. 현재까지 퀘스트를 진행하면서 커밋한 내..

220830 TIL 깨어있는 시간에 집중하기 [내부링크]

이번 주 주말에 다짐했던 깨어있는 시간에 최대한 집중하고 잠자는 시간을 조금이라도 더 늘리기 위한 계획이 오늘까지 아직은 잘 지켜지고 있고 효과는 굉장히 좋다. 이전까지 공부하면서 중간중간에 버리는 시간(?), 딴짓하거나 집중 안 하는 시간들이 꽤 있었고 그 시간들이 점점 쌓이다 보니 늦게 자는 결과를 초래했다. 그리고 마음속으로 어차피 오늘 늦게 잘 건데 조금 쉬자 이런 썩어빠진 마인드를 갖고 있었던 게 사실이다. 이번 주에는 저런 마인드를 다 버리고 눈떠있는 시간에는 뽀모도로를 활용하여 공부에 최대한 집중해서 버리는 시간 없이 진행 중이다. 그랬더니 오후 시간에 조는 일이 거의 없어지고, 학습하는 시간이나 문제를 해결하는 속도는 늦게 잘 때와 비슷한 거 같은데 잠자는 시간이 더 늘어서 피곤함을 덜 느..

220829 TIL 시간복잡도.. 새로운데? [내부링크]

오늘은 평소보다 일찍 일어나서 맑은 정신 상태로 코딩 도장 시간에 문제를 풀 수 있었다. 오늘의 코딩 도장 문제는 뭐였을까용??? 오늘의 문제는 완주하지 못한 선수로 이전에 한 번 풀어봤었던 문제라서 금방 풀 수 있을 줄 알았다. 우선 문제를 딱 보자마자 풀이과정이 바로 떠올라서 빠르게 작성하고 예시 테스트 케이스 다 통과시키고 프로그래머스에 빠르게 제출할 수 있었다. 근데 통과하지 못했다.. 나는 3개의 예시 테스트를 모두 통과해서 다 맞춘 줄 알았지만 효율성 테스트에서 0점이 나왔다.. 아래 코드가 효율성 0점짜리 코드이다. public String solution(String[] participant, String[] completion) { String answer = ""; List partic..

220828 TIL 오류를 대하는 자세 [내부링크]

아직까지 오류에 대처하는 자세가 제대로 잡혀있지 않아 오류만 마주하면 짜증부터 난다. 특히 제일 짜증 나는 상황은 강의를 보면서 그대로 따라쳤음에도 불구하고 오류가 발생했을 때.. 에러 메시지를 잘 확인하자 오늘도 어김없이 갈 길 바쁜 나의 발목을 잡는 오류 녀석들... 날 방해하지 마 제발!! 오늘은 항상 골칫거리였던 이 친구들을 처리하는 방법에 대해서 아샬 님의 강의에서 조금 배운 것 같다. 지금까지 나는 오류가 나오면 해결할 때 에러 메시지를 주의 깊게 보지 않고 어디서 문제가 발생했는지 정도만 확인하고 그 위치로 가서 코드 전체를 재확인했다. 하지만 이번 강의에서 아샬 님이 오류에 대처하는 자세를 주의 깊게 봤는데 에러 메시지를 자세히 살피시는 것을 확인했고 그 메시지 속에서 에러의 원인을 찾을 ..

220827 TIL 시간이 많다는 착각 [내부링크]

이번 주 배우는 주제는 로그인 / 회원가입이다. 로그인 회원가입은 지난번에 한번 퀘스트로 밤새 가면서 만들어봤던 기억이 새록새록 난다.. 이번에는 저번에 개고생 하면서 만든 로그인 / 회원가입 기능을 뭔가 마법처럼 쉽게 만들 수 있는 무언가가 있기를 기대했다. 왜 기대를 하냐면 저번 주에 이런 마법 같은 일을 repository를 구현하면서 봤기 때문이다. 이때까지 repository 기능을 구현하기 위해 findAll 메서드, save 메서드 등등 직접 다 로직을 작성했었는데 마법같이 JpaRepository를 상속받아서 사용하면 그런 로직을 하나도 작성 안 해도 미리 구현된 메서드를 갖다 쓰는 아주 편리한 기능을 알게 되어 이번 주에도 뭔가 있지 않을까 내심 기대하면서 강의를 봤다. 하지만 마법 같은..

220825 TIL 집중이 안될때는 뽀모도로를 활용하자 [내부링크]

회고시간에 돌아본 오늘 일과 오늘은 짝프를 같이하시는 동료분이 기존의 짝프 범위 말고 처음부터 끝까지 한번 다 만들어보자고 제안을 해서 처음부터 다 만들어보는 시간을 가졌다 처음에는 처음부터 만드는 거니까 오래 걸릴 줄 알았는데 월요일부터 계속 반복해서 만들었던 프로그램이라서 그런지 서로 막힘없이 쭉쭉 만들었다. 생각했던 것만큼 오래 걸리지 않고 마무리했지만 끝나고 나니 지치고, 기운이 쭉 빠지는 느낌이었다. 어제 todolist 마무리하느라 늦게잔 영향도 있는 것 같다. 그래서 짝프가 끝나고 난 뒤 오후 시간에 집중을 제대로 못했다는 것을 회고 시간에 알 수 있었다. 회고 시간에 오늘 뭐했는지 한 번 쭉 돌아봤다. 9~10시 코딩 도장 문제 풀기 10~12시 강의 반복 과제 12~13시 점심 13~15..

메가테라 10주차 회고 [내부링크]

10주 차 회고 메가 테라 10주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 과제 해결 속도 != 실력 상승 속도 한 주 한주 지날수록 나의 과제 해결 속도는 느려지고 있다. 이전에는 과제를 일단 어떻게든 빨리 완성해서 리뷰를 빨리 받아서 고쳐나가는 전략으로 1차 완성은 나름 빨리해서 리팩터링 받고 수정하는 시간이 꽤 있었는데, 저번 주부터는 완성 자체가 늦어지다 보니까 리뷰받고 수정하는 시간도 줄어들고 심지어 원래는 3개가 주어져야 하는 퀘스트가 앞에 2개를 시간 내에 제대로 못하니까 퀘스트가 주어지지도 않았다. 저번 주 퀘스트 창을 보면 마지막 하나는 to be contined만 남겨져 있고 무슨 퀘스트인지 구경도 못한다.. ㅠㅠ 궁금하긴 한데.. 이번 주도 퀘스트가 처음에 올라왔을 때 익..

220826 TIL CORS가 뭐야..? [내부링크]

오늘도 어김없이 진행된 코딩 인터뷰 시간 코딩 인터뷰 시간에 내가 받은 질문은 cors에 대한 것이었다. 사실 이번 주 학습 키워드 중에 가장 이해가 안 되었던 개념이 cors였었는데 하필 cors를 물어보셔서 매우 당황을 했다. 매우 버벅거리면서 cors에 대해 말을 했는데 말하면서도 내가 무슨 소리를 하고 있는지도 모를 정도로 아무 말 대잔치를 한 것 같았다. 이후 꼬리 질문으로 cors를 사용하는 이유와 cors의 동작 과정을 물어보셨는데 개념도 잘 알지를 못하니 제대로 대답했을 리가.. 아무튼 코딩 인터뷰 시간은 매우 부담이 되기는 하지만 이전에 진행해왔던 골든벨 시간보다는 훨씬 학습에 도움이 되고 있는 것 같다. 골든벨을 할 때는 개념만 딱 보고 키워드만 떠오를 수 있을 정도로 공부를 했다면 지..

220824 TIL 복붙 하지마!! [내부링크]

어제 퀘스트를 진행 중 이전에 썼던 코드를 또 사용해야 할 일이 생겨서 복붙 해서 사용했었다. 단순히 똑같은 내용을 사용할 거라서 복붙 하는 게 빠르니까 복붙을 했었는데 이에 대한 피드백을 받았다. 코드를 복붙하면 놓치는 부분과 어디선가 빼먹고 수정하지 않는 부분이 나온다는 피드백도 디스코드에 남겨 주셨다. 코드를 복붙해서 사용하면 생산성 있고 빠르다고 생각을 했지만 다시 생각해보면 나는 학습하는 입장이라 복붙 하는 건 전혀 공부가 되지 않는다. 코드를 다시 작성하면서 반복 인출 학습을 해야 하는데 복붙 해버리면 인출 학습이 전혀 되지 않고 주중에 반복해서 인출 학습하는 의미가 없어진다. 다시 한번 반복 인출 학습의 의미에 대해 생각해보자. 그리고 학습 목표는 빠르게 과제를 제출하는게 아니라 코드를 작성..

220823 TIL 테스트 코드 먼저 작성하자 [내부링크]

오늘은 자바스크립트로 코딩도장 풀면서 알게 된 sort 때문에 애를 먹었다. 문제는 프로그래머스의 K번째수로 주어진 배열을 슬라이싱 후 그 배열을 정렬한 후 답을 도출해내는 과정이 필요했다. 정렬은 당연히 sort로 한 다음에 그 배열에서 인덱스 번호로 답을 찾으면 될 줄 알았는데 자꾸 2번 케이스에서 실패가 돼서 문제가 풀리지 않았다. 답을 구하는 과정에서 슬라이싱이 잘못되었나? 아니면 정렬된 배열에서 답을 가져오는 과정이 잘못되었나?? 생각을 했는데 테스트 코드를 작성한게 전부 통과돼서 당연히 문제도 풀릴 줄 알았는데 풀리지 않아서 당황했다. 뭐가 문제인지 한참을 고민하다 sort에 대한 테스트 코드가 빠진 것을 확인하고 sort가 잘못되었나 생각을 했다. 그래서 자바스크립트 sort에 대해 검색을 ..

220822 TIL 흐름을 파악하자 [내부링크]

요즘 하루 중 가장 피곤 한때는 아침에 일어날 때가 가장 피곤한 것 같다. 자고 일어나면 컨디션이 좋아야 하는데 나는 제일 최악이었다가 시간이 지날수록 충전이 되는 느낌이다. 오늘 진행되는 짝프의 양을 확인하고 처음에는 진행해야 할 양이 많다고 생각해서 못 끝낼 줄 알았다. 사실 주말에 강의를 전부 인출하지 못했기 때문이기도 있다. 그래도 일단은 시간 내에 할 수 있는데 까지 해보기로 하고 진행했다. 생각보다 빨리 진행되었는데 막히는 부분은 강의를 조금씩 참조하면서 흐름을 파악을 했다. 강의를 보면서 다음에 뭘 해야 하는지 아니까 로직 자체는 어떻게 짜야하는지 스스로 인출이 됐었다. 인출이 막혔던 문제는 로직이 기억 안 났던 게 아니라 강의 흐름이 기억이 안 나서 막히는 부분이 대부분이었다. 아무래도 주..

220821 TIL 각자 자신의 시간대가 있다. [내부링크]

오늘 친구에게 오랜만에 연락이 와서 이번에 인턴에 합격했다고 연락이 왔다. 친구는 아직 내가 편입 합격하고 학교 다니는 줄 알고 있길래 학교 휴학하고 부트캠프하고 있다고 말했다. 요즘 몇 개월 만에 공부하고 취업시켜준다는 식으로 광고하는 거 말하는 거냐고 나에게 물어봤다. 아무래도 자극적인 문구의 부트캠프 광고가 판을 치다 보니 부트캠프를 바라보는 시선이 좋지 않았던 거 같다. 열심히 공부해서 편입 합격해놓고 왜 학교 휴학하고 부트캠프하냐고 물어보는데 지금까지 이와 비슷한 소리를 몇 번을 들었는지 지겨울 정도다.. 그때마다 그냥 하고 싶은 게 생겨서 공부 중이라고 대충 말하고 마무리한다. 종종 친구들이랑 연락하다 보면 " 요새 뭐하냐 -> 학교 휴학하고 공부(부트캠프)하고 있어 -> 왜..? " 이 패턴..

220820 TIL 졸음과의 전쟁 [내부링크]

잠을 깨기 위한 노력 요새 부쩍 강의나 공부하면서 조는 일이 많아졌다. 어제는 주말에 새로 올라오는 강의를 위해 평소보다 2시간 정도 일찍 잤지만 큰 효과를 보지 못했다. 오전에 일찍 일어나서 강의를 보는데 어느새 졸고 있는 나를 발견했다. 잠을 깨기 위해 일어나서 강의를 들었지만 일어서 있는데도 졸린 상황까지 와버렸다. 이렇게 졸면서 하루를 보내면 큰일 날것 같아 카페에서 공부하기로 결정했다. 잠을 깨기 위해 좋아하지않는 아메리카노까지 먹으면서 공부를 했지만 커피로 잠을 깨우기에는 역부족이었다. 졸릴 때마다 입에 커피를 머금기도 하고, 밖에 나갔다 오는 등 잠을 깨기 위한 노력을 계속했다. 하지만 노력들이 무색할 정도로 졸음이 계속 왔는데 문제가 있다고 판단해서 잠깐 멈추고 왜 계속 졸음이 오는지 근본..

220819 TIL 개념을 챙기자 [내부링크]

이번 주부터 골든벨 시간이 사라지고 면접 형식으로 바뀌었다. 지금 까지 배운 개념들을 면접 보는 것처럼 질문에 답을 해야 하는데 오늘 나의 부족한 개념 학습 수준이 만천하에 공개되었다. 이번 주 내내 리액트를 배웠는데 리액트에 대해서 설명도 제대로 못하고 심지어 쉽디 쉬운 primitive type 종류를 말하는 게 있었는데 다 말하지도 못했다. 분명 머릿속으로는 알고 있는 내용인데 바로 떠오르지가 않아 당황을 하니까 머릿속이 하얘져서 생각이 나질 않더라... 이 부분은 분명 내가 알고 있는데 말을 하지 못한걸 보니 개념을 말로 인출하는 연습이 되지 않은 걸 알 수 있었다. 나도 말 잘하고 글 잘 쓰고 싶은데 너무 어렵다..ㅠㅠㅠ 다른 동료분들이 질문을 받는 것을 들으면서 내가 답할 수 있을지 생각해봤지..

메가테라 9주차 회고 [내부링크]

9주 차 회고 메가 테라 9주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 처음에는 천천히? 이번 주는 자바스크립트, 리액트 둘 다 처음 배우면서 모든 게 새로운 한 주였다. 뭐든지 처음 배울 때는 익숙하지 않기 때문에 천천히 배우면서 익숙해지는 게 먼저라고 생각을 해왔다. 하지만 이번 주는 그 틀에서 완전히 벗어나야만 했다. 처음 배우는 언어인 자바스크립트로 Spiral Matrix 같은 난이도 있는 문제를 풀어야 했고, 피보나치수열 문제도 풀어야 했다. 자바스크립트를 어느 정도 배운 분들에게는 저 문제 푸는 게 얼마나 어렵겠어라고 생각할 수 있겠지만 지금 나는 몇 주간 배운 자바로도 저 문제를 당당히 풀 수 있다고 말 못 하는 상황인데 처음 배우는 자바스크립트로 풀어야 한다는 게 매우 힘들었..

220818 TIL 아침을 깨우자 [내부링크]

요즘 수면시간이 급격히 줄었다. 어제도 과제를 하느라 4시 30분이 돼서야 잘 수 있었다. 이렇게 된 건 내 실력이 부족하기 때문에 잠을 줄여야만 과제를 겨우 해결할 수 있기 때문이다. 늦게 자다 보니까 8시 50분에 겨우 일어난다. 알람도 많이 해놓지만 잠결에 자꾸 끄고 자버린다. 그래서 조만간 지각할 수 도 있을 것 같은 불안감이 든다. 아직은 출석을 5분 정도 남기고 간당간당하고 있지만.. 오늘도 55분에 겨우 일어나서 후다닥 출석하고 정신도 못 차린 채 바로 9시에 코딩 도장 문제를 풀러 갔다. 몽롱한 상태로 문제를 보니까 문제가 눈에 하나도 안 들어왔다. 자꾸 멍 때리게 되고, 졸고 있고.. 집중이 하나도 안돼서 결국 오늘 문제를 풀지 못했다. 사실 이번 주 내내 늦게 자다 보니까 오전에 정신을..

220817 TIL onClick 함수 호출 왜 안돼..? [내부링크]

오늘은 리액트로 Todo List 만들다가 발생한 onClick 이벤트 오류에 대해서 정리해보려고 한다. 할 일 추가 버튼과 삭제 버튼을 따로 만들어서 각각의 버튼에 onClick으로 함수를 넣어줬다. 할 일 추가 버튼 코드 삭제 버튼 추가 코드 할 일 추가 버튼을 눌렀을 때 호출되는 함수는 handleClickPost 삭제 버튼을 눌렀을때 호출되는 함수는 handleClickDelete 할 일을 지우기 위해 삭제버튼을 눌렀을 때 어떤 할 일을 삭제해야 하는지 알기 위해 task.id(식별자) 값을 함수에 매개변수로 전달해주려고 했다. 이렇게 하고 할 일을 삭제 하려고 삭제 버튼을 누르는데 아무리 눌러도 삭제가 되지 않았다. 그래서 버튼이 안 먹는건가 생각해서 handleClickDelete 함수가 호출..

220816 TIL 뭣이 중헌디? [내부링크]

잘못된 우선순위 오늘은 학습하면서 가장 중요하고 가장 먼저 생각해야 하는 부분을 놓쳤다는 것을 깨달았다. 이번 주는 학습할 양이 많았기 때문에 어떤 부분에 힘을 써야 하는지 즉 우선순위를 정하는 게 중요했다. 물론 모두 다 완벽하게 하면 좋지만 현실적으로 불가능한 양이였기에... 나는 자바스크립트로 spiral matrix 문제 푸는 강의가 중요하다고 생각해서 가장 높은 우선순위로 두고 많은 시간을 사용했다. 하지만 오늘 트레이너님들과 이야기를 하면서 주말 강의 학습이 잘못되었다는 것을 알았다. spiral matrix 문제에 집중해서 완벽히 이해하면 좋지만 다른 강의들을 소화하지 못하고 있는데 sprial matrix만 보고 있는 게 잘못되었다고 말해 주셨다. -> 내 이야기.... 뭔가 spiral ..

220815 TIL 비효율적인 하루 [내부링크]

오늘은 주말에 학습한 내용을 인출하는 시간을 가졌다. 주말에 자바스크립트 + 리액트 내용을 공부했는데 리액트보다는 자바스크립트 학습에 시간을 상대적으로 많이 사용했다. 그 결과로 오늘 리액트 인출할 때 낭패를 맛봤다. 주말에 리액트 강의를 충분히 학습하지 못해서 인출이 제대로 되지 않아 강의를 보면서 따라 치는데도 제대로 되지 않았다. 심지어 이번 주 강의 반복 과제 조건에 자바스크립트로 테스트 코드도 작성해야 했다. 분명 테스트코드 작성하는 구조는 자바랑 비슷한 거 같은데 생각대로 잘 되지 않았다. 그래서 현재 게시판 만들 때 테스트 코드 작성할 때 애를 먹고 있다. 잘 안되다 보니까 어렵게 느껴지고, 어렵게 느껴지니까 집중이 잘 안 되고.. 결과는 오늘 학습효율이 엄청 안 좋았다는 것을 현재 나의 과..

220814 TIL Hello, JavaScript! [내부링크]

자바스크립트와 첫만남 오늘은 어제 못한 자바스크립트 개념 정리를 시작했다. 어제는 올라온 강의를 한 번씩 보고 따라 쳐 보는 것만 했는데도 워낙 강의가 많아서 많은 시간을 사용해서 개념 정리를 다 못했다. 자바스크립트는 이번에 처음 배우는 언어였다. 이전에 어디서 자바와 자바스크립트는 인도와 인도네시아, 바다와 바다코끼리처럼 완전히 다른 관계라고 해서 살짝 쫄았는데 자바와 자바스크립트가 생각보다 다른듯 다르지 않은 느낌이었다. 언어를 사용하는 큰 구조는 비슷한 느낌이라고 해야하나..? 자바를 좀 배우고 나니까 처음에 기본 문법을 잘 잡고 가야 나중에 고생을 덜 하는 거를 느꼈기 때문에 자바스크립트는 처음 배울 때 기본 개념을 잘 잡고 가려고 했다. 그래서 모던 자바스크립트 튜토리얼을 딱 펼치고 하나씩 공..

220813 TI Git 그만 좀 괴롭혀 [내부링크]

오늘 또 git에서 충돌이 일어났다.. 저번에 한번 충돌 일어난 적이 있었는데 저번에는 해결하지 않고 넘어갔었는데 이번에는 충돌 문제를 해결해야만 했다. github에서 친절하게도(?) 충돌 난 파일들을 보여준다. 이게 몇개야.. 그냥 모든 파일 테스트 파일까지 전부 충돌이 났다. 이 충돌문제를 해결하기 위해 열심히 구글링을 해서 방법들을 몇 개 찾아봤다. 우선 첫번째는 깃허브에서 웹에서 해결할 수 있는 방법이 있었다. 여기서 Resolve conflicts를 누르면 되는 건데 나는 충돌 난 파일이 너무 많아서 웹에서는 해결할 수 없다고 버튼이 비활성화되어있는 상태다.. 그러면 깃 명령어를 이용해서 해결해야 했다. 그래서 깃허브가 친절하게 command line까지 알려주면서 해결하라고 해준다. 스텝 1..

메가테라 8주차 회고 [내부링크]

8주 차 회고 메가 테라 8주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 즐거움과 짜증이 공존하던 한 주 이번 주는 spring에 대해서 처음 배우는 한 주였다. 나는 뭔가 뭔가 새로운 것을 배우는 자체에 즐거움을 많이 느끼는 편이다. 처음 배우는 개념이기 때문에 주말에 강의를 보면서 하나하나 알아가는 재미와 배운 개념을 과제를 통해서 적용해가는 재미가 쏠쏠했다. 하지만 그 재미는 수요일 까지였다... 수요일에 기존에 진행하던 과제에 추가 요구사항이 생겼는데 그 요구사항을 구현하면서 멘탈이 나갔다. 많은 시간을 쏟으면서 기능을 구현하려고 했지만 몇 시간이 지나도 눈에 보일만한 성과가 보이지 않았다. 이게 목요일 저녁까지 반복되다 지쳐버리고 말았다. 분명 나는 시간을 쏟고 노력을 했는데 앞을 보..

220812 TIL Layered Architecture란 무엇인가? [내부링크]

오늘 아침에 어제 제출한 과제에 대한 코드 리뷰를 확인하는데 멘붕이 왔다. 생각보다 많은 부분이 잘못되었다는 것과 이것을 수정하기 위해서 코드 전체적인 구조 자체를 바꿔야 할 것 같다는 생각이 들었기 때문이다. repositroy의 변수를 service에서 직접적으로 건드리고 있었고, controller에서 repository에 바로 접근하고, repository가 해야할 역할을 service가 하고 있는 등 잘못된 코드가 한 두 개가 아니었다. 일단 repository와 service 각각의 역할을 제대로 파악하지 못했기 때문에 일어난 일인 것 같다. 그래서 각 계층이 무슨 역할을 하는지 알기 위해 Layered Architecture에 대해서 공부해봤다. Layered Architecture란? 계층..

220811 TIL 공부하다 한번씩 찾아오는 무기력함 [내부링크]

오늘은 근 몇 주간 가장 공부가 안 되는 하루였다. 다시 생각해도 허무한 하루를 보낸것 같다. 공부가 안될때는 휴식을 좀 취해라 이런 말들이 많은데 아직 완료하지 못한 과제들이 많기 때문에 맘 놓고 쉬지도 못하는 상황이다. 그리고 휴식을 취해도 의미가 없는 게 공부가 안 되는 결정적인 이유가 몸이 지쳐서 안 되는 게 아니다.. 어제부터 해결하려 했던 페이지 문제가 아직까지 해결이 되지 않고, 어제부터 많은 시간을 사용했는데도 유의미한 성과가 없기 때문에 자꾸만 무기력함과 현타를 오늘 느꼈던 것 같다. 학생 때 열심히 공부하고 시험을 봤는데 시험 성적이 안 나왔을 때 느낀 현타와 같은 느낌이다... 그때마다 정말 아무것도 하기 싫은데 사실 지금 그렇다. 어떻게 하면 이 무기력함에서 벗어날 수 있을지 생각을..

220810 TIL 아직도 어려운 git [내부링크]

오늘 새벽에 과제를 다 만들고 푸쉬를 한 뒤 깃허브에 잘 올라갔는지 확인을 했는데 깃 충돌이 또 발생했다. 이전에 충돌이 한번 나서 해결 못하고 올린 pr을 임의로 close하고 다시 올렸었는데 트레이너님이 pr을 다시 보내지 말라고 하셔서 이번에는 충돌 난 걸 해결해야 했었다. 근데 나만 충돌이 난 줄 알았는데 동료분들 모두 다 충돌이 나고 pr 올린 게 이상한 곳으로 올라가는 현상이 발생했다. 뭐가 문제인지 확인하다가 fork가 이상하게 돼있는 것을 발견했다. fork를 맨 처음에 1mptera 레파지토리에 있는 것을 fork해왔는데 새벽에 보니까 내가 1mptera에서 fork해온 내 깃허브의 레파지토리를 동료분들이 fork를 하고 있었다. 그래서 동료분들이 푸쉬하면 내 깃허브로 과제가 제출되고 있..

220809 TIL 의도적 수련 [내부링크]

의도적 수련을 위한 난이도 높이기 오늘 코딩 테스트 문제는 이전에 풀었던 문제였다. 처음에는 이전에 풀어봤던 문제니까 금방 풀겠구나 생각을 했는데 1시간이 지나도 풀지 못했다.. 그 이유는 의도적 수련을 위해 이전에 풀었던 방식과 다른 방법으로 풀어보려고 시도를 했기 때문이다. 이전에 풀었던 문제였기 때문에 나는 A영역에 있다고 생각하여 C영역으로 진입하기 위해 나는 의도적으로 제약사항을 걸어 문제의 난이도를 높였다. 제약사항은 이전에 풀었던 방법과 다르게 풀면서 stream을 이용해서 풀기였다. 잘못된 난이도 조절 하지만 시간이 지날수록 이전에 풀었던 방식과 비슷하게 접근하고 있고 stream은 내 코드에서 찾아볼 수 없었다. 그래서 다 지우고 최대한 stream을 이용하려 했지만.. 생각만 하다가 1..

220808 TIL 할지 말지 고민이 된다면 해라! [내부링크]

비가 와서 나가기 싫어요.. 오늘도 저번 주와 마찬가지로 정규시간이 다 지난 후 저녁을 먹고 카페 가서 공부하려고 계획을 했었다. 근데 오전에는 비가 하나도 안 오다가 오후쯤 되더니 비가 엄청 내리기 시작했다. 비가 적당히 오면 우산 쓰고 가면 되지만 밖을 보는데 적당한 수준이 아니라 이거는 우산 쓰고 나가도 다 젖을 정도로 비가 엄청 오고 있었다. 그래서 비도 오는데 오늘은 그냥 집에서 할까 고민하다 동료분들에게 비도 오는데 카페를 갈지 말지 물어봤다. 동료 한 분이 할까 말까 할때는 하세요!라고 하셔서 밥 먹고 나가야겠다고 다짐을 했다. 근데 또 밥먹고 나니까 나가기 싫어지는 마음이 스멀스멀 올라오고 있었다... 사실 비가 와서 나가기 싫은 건 핑계가 아니었을까..? 나갈까 말까 고민 엄청하고 있었..

220807 TIL 처음은 항상 재밌다. [내부링크]

오늘은 오랜만에 공부하면서 재밌다는 감정을 느꼈던 것 같다. 이번 주는 처음으로 스프링에 대해 배우고 있는데 어제 강의를 처음 봤을 때는 @(어노테이션)을 엄청 많이 사용해서 이게 뭐 하는 거지..? 하고 지나갔었다. 오늘은 어제와 같이 바보처럼 강의만 보면 하나도 모를 거 같아서 강의를 듣기 전에 스프링에 대해서 알아보고 학습 키워드와 어제 강의에서 봤었던 어노테이션들을 좀 공부하고 강의를 봤다. 그랬더니 조금은 이해가 되기 시작했고 강의를 보면서 어노테이션을 사용하는 이유를 조금이나마 알 수 있었다. 스프링의 'ㅅ'도 모르고 봤을 때는 뭐가 뭔지 하나도 몰라서 어렵기만 해서 집중도 잘 안되고 그랬는데 오늘은 'ㅅ'정도는 알고 보니까 집중도 잘 되고 강의에서 쓰인 어노테이션이 왜 쓰였는지와 언제 쓰였는..

220806 TIL 리팩터링을 왜 해??? [내부링크]

오늘은 정말 오랜만에 책을 읽었다.!! 이유는 어제 동료들의 액션플랜에 책을 읽는다는 액션플랜이 많아서 나도 이제는 시간을 내서 책을 읽어야겠다는 생각을 했다. 그리고 골든벨 우승 상품으로 주신 책도 다 읽지 못했기 때문에 책값이 아깝지 않게 조금씩이라도 읽어야 겠다는 생각떄문에 책을 펼쳤다. 어떤 책을 읽을까 하다 실용주의 프로그래머의 목차를 보던 중 리팩터링 주제가 있어서 읽어봤다. 리팩터링 주제를 선택한 이유는 바로 어제 로그인 / 회원가입 과제를 리팩터링 하다 많은 오류를 마주하고 멘털이 부서졌기 때문이다.. 그래서 잘 작동하기만 하면 됐지 리팩터링 왜 해??? 라는 생각이 내 머릿속 박혀버렸다.. 그래도 분명히 리팩터링 하는 과정이 필요하니까 이렇게 책으로도 써져있고 트레이너님들이 시키는 게 아..

메가테라 7주차 회고 [내부링크]

7주 차 회고 메가 테라 7주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 불태웠던 한 주 6주 차 때 회고하면서 한 주 간 시간이 정말 빨리 지나갔다고 했던 거 같은데 이번 주는 더 빨리 지나간 것 같은 느낌이다. 시간이 빨리 가는건 좋지만 그만큼 매일매일 시간이 지나가는 것을 느낄 여유가 없을 정도로 할게 많다는 뜻.. 이전에는 스스로 당당하게 나 한 주간 정말 열심히 공부 했어! 라고 말할 수 없었지만 이번 주는 한 주간 스스로 공부를 열심히 했다고 말할 수 있는 한 주인 것 같다. 목표했던 시간에 끝내지 못한 과제때문에 코딩하면서 밤을 새기도 했다. 열심히 했다고 스스로 말할 수 있는 이유는 별거 아니지만 이번 주에 공부하면서 적용한 나만의 규칙 두 가지 덕분에 밀도 있게 공부를 했기 때..

220805 TIL 무조건은 없다 [내부링크]

쉽지 않았던 하루 오늘 나를 괴롭혔던 문제는 과제를 리팩터링 하던 도중 일어났다. 관심사의 분리를 위해 기존에 다른 클래스에서 진행하던 조건 검사를 새로운 클래스를 만들어서 그냥 옮기기만 했는데 잘 되던 기능이 갑자기 작동하지 않는 거였다. 조건 검사하는 코드를 고친 게 아닌데 안돼서 뭐가 문제인지도 모르는 상황에 빠졌다. 그래서 뭐가 잘못됐는지 찾기 위해 코드를 처음부터 보면서 문제를 찾아보는데 아무리 봐도 작동되야하는데 안돼서 멘붕에 빠졌었다. 문제 상황은 회원가입 시 입력 정보가 하나라도 빠지면 입력되지 않은 정보가 있다는 페이지가 나와야 하는데 비밀번호를 입력하지 않으면 서버가 죽는 상황이다. 근데 나를 멘붕에 빠지게 만들었던 건 이름, 아이디, 이메일, 비밀번호 재확인 이 4개는 입력 안 해도 ..

220804 TIL 밤을 새서라도 완성하자 [내부링크]

때로는 밤도 새면서….. 어젯밤에 로그인 회원가입 페이지를 만들다가 밤을 새 버렸다. 나는 옛날부터 밤새면서 뭔가를 하는 걸 잘 못했었다. 밤을 새우려고 하면 오전 4~5시만 되면 머리가 어지럽고 너무 졸려서 5시의 고비를 못 넘긴다. 고등학생 때는 정말 잘 봐야 하는 시험이 있어서 벼락치기한다고 밤을 새운 적이 있었는데 밤을 샌 여파로 컨디션이 너무 안 좋아져서 오히려 시험을 못 봤다. 그 이후로 웬만해서는 밤을 새려고 하지 않는다. 근데 오늘 신기하게도 밤을 새면서 하나도 안 졸리고 집중이 정말 잘 됐다. 시간도 엄청 빨리 가고 로그인 회원가입을 반드시 만들겠다는 목표가 있었다. 나 뭐 한 거지..? 어제 8시에 만들기 시작했는데 8시부터 12시까지 4시간 동안 아무것도 못 만들고 시간만 보냈다. ..

220803 TIL 공유의 이점 [내부링크]

Todo List 과제를 어제저녁에 1차적으로 일단 완성하고 오늘 로그인 / 회원가입 과제 올라온걸 한 번 확인했는데 요구사항도 엄청 많았고, 진짜 로그인 / 회원가입 페이지랑 똑같은 요구사항을 만들어야 하는 걸 확인하고 놀랐다.. 요구사항을 하나하나씩 살펴보면서 이거 내가 만들 수 있나..?라는 생각을 했다... 일단 어떻게든 배운 내용을 활용해서 만들고 있는데.. 만들면서 마주하는 문제들이 너무 많았다. 강의에서 나오지 않았던 문제들을 마주하면 해결하기 위해 구글링 하고 이것저것 실험해야 하는데 이러다 보면 시간이 많이 소비된다. 많은 시간을 투자해서 문제를 해결할 수 있으면 다행인데 이렇게 시간을 써도 해결이 되지 않는 문제가 발생했다. input 태그의 name 값을 가져오는데 가져올 때 한글은 ..

220802 TIL 마감시간의 효과 [내부링크]

시간을 효율적으로 쓰자 오늘은 시간을 상당히 효율적으로 잘 사용한 것 같다. 이번 주는 해야 할 일이 많기 때문에 계획적으로 움직이지 않다가는 정말 낭패를 볼 것 같아서 최대한 시간을 나눠서 움직이려고 했다. 오후 6시까지 강의 인출 학습을 어떻게든 끝내는 1차적인 목표와 이후 저녁 시간은 퀘스트를 도전하는 시간으로 하루 목표를 크게 두 개를 잡았다. 그리고 12시 이후에는 인출 시간에 인출하지 못한 부분을 복습하는 시간으로 생각했다. 6시까지 끝내는 강의 인출 시간을 좀 더 세분화했다. 2시 30분까지 송금-2까지 인출, 4시 20분까지 송금 마무리, 마지막으로 부족하다고 느낀 거래 내역 조회를 조금 더 투자해서 6시까지 마무리하는 걸로 계획을 세웠다. 송금 기능을 마무리하는데 4시 20분이 다 돼가는..

220801 TIL 오랜만의 짝프로그래밍 [내부링크]

오늘은 약 2주 만에 짝 프로그래밍을 다시 시작했다. 레벨테스트, 페이지 만들기 등 혼자 작업을 하다가 오랜만에 동료분들과 같이 짝 프로그래밍을 하니 재미있었다. 짝프로그래밍 내용을 전날에 미리 숙지해놔야 짝프 시간 안에 완성할 수 있기 때문에 전날에 최대한 짝프 범위까지 반복해서 강의를 들었다. 효과는 굉장했다. 이해가 되니 보이기 시작하다. 이번 주 내용이 많기도 하고 다소 어렵다 보니까 이월 전에 짝프할때 정말 엉망진창이었다. 내용이 어렵다 보니까 강의를 외운 다음 서로 최대한 아샬 님의 강의 순서를 따라가려고 했지만 강의 1개당 40분 정도 되는 분량의 8개 정도 되는 강의를 순서까지 전부 외울 수는 없었다. 그러다 보니까 서로 생각하는 순서도 뒤죽박죽이라 완성 못한 건 당연했고, 결과물이 엉망진..

220731 TIL 목표로 한 것은 끝내자 [내부링크]

오늘 주말이라 그런지 눈이 늦게 떠졌다. 평일에는 출석해야 한다는 압박감 때문에 알람을 4~5개씩 맞추고 겨우 일어나는데 주말에는 출석하지 않아도 돼서 알람을 맞추지 않고 잤다. 그러다보니까 9시 좀 넘어서 일어나고 조금 밍기적대다 10시 가까이 돼서 공부를 시작했다. 이러다가 더 늘어질 것 같아서 무작정 밖으로 나왔다. 집에 있으면 옆에 침대가 보여서 습관적으로 눕게 되기 때문이다. 10분만 쉬려고 누워도 10분 이상 쉴 때가 빈번하기 때문에 눈에서 침대가 안 보이는 카페로 향했다. 공부 시작전 오늘 반드시 끝내야 하는 목표를 설정하고 시작했다. 1. 개념노트 정리 끝내기 2. 전 강의 인출 1회 이상하기 3. 개발자 프로필 페이지 리팩터링하기 우선 결론부터 말하면 셋 다 아직 완료하지 못했다......

220730 TIL 밀리면 끝이다 [내부링크]

겁먹고 시작하는 한 주 이번 주 학습할 내용은 지난번에 배웠지만 하나도 기억이 나지 않고 어렵다고 생각만 되는 HTTP와 HTTP를 이용하여 더 복잡한 마카오 뱅크를 만드는 내용이다. 이번 주가 특히 어렵다고 생각되는 이유 중 첫 번째는 일단 강의수가 평소보다 2배 정도 된다. 강의 수가 많다는 건 그만큼 배울 내용이 많고 외워야 할 내용도 많아진다는 이야기다. 특히 이월 전에 이번 주 내용을 배웠을 때는 한주가 지나도 마카오 뱅크를 완전히 인출하지 못했다. 강의 내요이 많아 코드를 다 외우지도 못했고 그러다 보니 이해를 하나도 못했었다. 그래서 이번 주에 배우는 내용들이 저번에 배웠을 때 어렵다고 생각된다.. 희미하게 보인다..! 마카오 뱅크 근데 지금까지 마카오 뱅크 모든 강의를 1회 시청을 완료한 ..

메가테라 6주차 회고 [내부링크]

6주 차 회고 메가 테라 6주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 시간아 멈춰라 6주 차는 무슨 일이 있었는지 조차 모를 정도로 빠르게 지나갔다. 이번 주가 유독 시간이 짧게 느껴졌었는데 그 이유가 할게 너무 많았기 때문이라고 생각한다. 우선 이번 주는 HTML/CSS를 배우는 주간이었는데 주말에 MDN사이트를 이용해서 HTML과 CSS에 대해서 전체적으로 공부했다. CSS를 공부하다가는 양이 너무 많아서 이거를 주말 안에 다 볼 수 있을까 하는 생각도 했다. 평일 첫 과제는 CSS 게임들이었다 총 8개를 클리어해야만 다음 과제를 할 수 있었다. 8개라 해봤자 게임인데 금방 끝낼 수 있겠지 하고 시작한 과제는 저녁이 다돼서야 겨우 제출할 수 있었다. 월요일은 하루 종일 게임만 했다. C..

220729 TIL 내가 언제 우승했더라....? [내부링크]

저조한 골든벨 성적 몇 주간 금요일 콘텐츠 중 하나인 메가 골든벨에서 저조한 성적을 계속 받고 있다. 이제는 내가 골든벨 우승 후기를 올렸는지 기억이 나지 않고 내가 우승을 했었는지 조차 의심이 되는 성적을 받고 있다. 왜냐.. 지금은 우승은 커녕 50문제 중 30문 제도 겨우 맞추고 있다.. 골든벨 문제 출제 방식이 바뀐 이후부터 성적이 저조했다. 기존에는 문제와 정답이 미리 주어지고 그 문제를 맞히는 거였다면 바뀐 이후는 문제가 미리 주어지지 않아서 어떤 문제가 나오는지 모른다. 강의에서 나오는 개념들을 직접 찾아보면서 공부해야 맞출 수 있다. 이렇게 바뀐 이후 부터 문제를 못 맞히는 거 보면 개념 공부가 제대로 되지 않았다는 것을 알 수 있다. 골든벨 성적이 저조한 이유 1. 메가 테라의 많은 콘텐..

220728 TIL 공부에 요행따위는 없다 [내부링크]

나 풀 수 있을까..? 3일째, 계속해서 코딩 도장 문제를 1시간 안에 풀지 못해서 저녁마다 시간을 쪼개서 문제를 다시 풀고 있다. 지금까지 5월부터 평일 아침에 한 문제씩 약 3달 정도 풀었는데도 뭔가 실력이 늘었다는 느낌을 받지 못하고 있다. 최근 들어 더욱 그렇다. 코딩 도장 문제 난이도가 올라간 것도 있겠지만 그래도 이제는 프로그래머스 레벨 1은 시간이 오래 걸려도 풀 수 있어야 한다고 생각한다. 하지만 이번주 문제는 시간이 더 주어진다고 풀 수 있을 것 같은 문제가 아니었다. 그냥 어떻게 접근해야 하는지 조차 모르는 문제도 있었다. 3일째 계속해서 문제를 풀지 못하니 코딩 문제를 푸는데 의욕이 떨어지는 느낌이 든다. 현타 아닌 현타도 왔다.. 3달이나 했는데 이것도 못 풀어..? 그것도 3일이나..

220727 TIL 극한의 효율 뽀모도로 공부법 [내부링크]

10분 공유 시간의 효과 최근에 동료들과 뽀모도로 공부법으로 40분 공부 10분 공유 10분 휴식 이 사이클로 공부하고 있다. 뽀모도로 공부법이 생각보다 효율이 좋다. 10분 공유시간에 결과물을 동료들에게 보여줘야 한다는 압박감이 있어서 40분 동안 집중을 엄청 하게 돼서 공부시간의 효율을 극한으로 올려준다. 만일 공유 시간에 공유할 게 없다는건 결과적으로 동료들에게 나는 40분 동안 한 게 없는 것처럼 보일 수 있기 때문에 파워 집중을 해야 한다 10분 쉬는 시간의 필요성 그리고 10분 쉬는 시간에 의무적으로 쉬어야 하는 이유도 알게 되었다. 뽀모도로 초반에는 40분 공부하는 게 짧게 느껴졌을 때가 있었는데, 그때마다 쉬는 시간에 안 쉬고 더 공부했었다. 쉬지 않고 계속 공부하니까 금방 지치는 경우가 ..

220726 웹 페이지야 반응해줘.. [내부링크]

생각보다 재밌는데? 마카오 뱅크와 메가 톡 웹페이지 만드는 게 생각보다 재미를 느끼는 중이다. 마카오 뱅크 백엔드 부분을 할 때는 그렇게 어려웠는데... 일단 재미를 느끼는 이유는 시각적인 요소가 가장 큰 것 같다. 내가 코드 친 게 웹페이지로 눈에 바로바로 보이니까 뭔가 진짜 만들고 있다는 느낌이 들기 때문이다. 하지만 중간중간 잘 안돼서 답답하기도 하기도 하다. 해줘! 반응 그중에 가장 큰 문제는 반응형..... 창 줄이면 비율을 유지하면서 줄어야 하는데 자꾸 이리저리 다 튀어나간다.. 맨 처음 만들었을 때는 이뻤는데 창 사이즈를 줄이면 바로 글자들 여기저기 날라 댕기면서 이미지는 창밖으로 잘려서 나오고 난장판이 된다.. 그때부터는 어디서부터 잘못된 건지도 모르고 멘털이 나간다.. 이번 마카오 뱅크 ..

220725 TIL 무지성 100문제 풀기 [내부링크]

CSS 게임 마라톤 오늘 올라온 과제는 이전과 마찬가지로 CSS 게임들을 클리어하는 거였다. 하지만 이번에는 이전에 했던 게임 3가지 종류 CSS Diner, Flexbox Froggy, Grid garden와 더불어 5개의 게임이 더 추가가 되었다. 총 8개.. 과제 이름이 CSS 게임 마라톤인 이유다. 8개의 CSS게임들을 다 클리어해야만 다음 과제인 웹페이지 만들기를 할 수 있다. 그래도 8개 중 3개는 이전에 반복하면서 많이 했던 게임들이니까 금방 하겠지 생각하고 기분 좋게 시작했다. 목표는 일과시간 안에 게임을 끝내고, 저녁에는 마카오 뱅크 웹페이지 만들어서 1차 완성하고 자는 걸 목표로 했다. 근데 게임을 진행하면 할수록 이거 생각보다 시간 많이 걸리겠다는 것을 느꼈다. Guess CSS 게임..

220724 TIL 상대 단위(em, rem, vw, vh)에 대하여 [내부링크]

상대 단위 상대 단위란 px처럼 고정되지 않고 유동적으로 바뀔 수 있는 길이를 나타내는 단위이다. 상대 단위의 종류에는 em, rem, vh ,vw 등이 대표적인 css의 상대 단위이다. 이전에 블로그 웹 클론코딩할때 이 상대 단위를 사용하지 않고 절대 단위를 사용해서 웹페이지의 크기가 달라지면 내가 처음에 만들었던 모양이 다 깨졌던 경험이 있다. 그래서 3가지 화면 기준을 잡고 화면 크기마다 각각 다르게 px로 설정해줬던 기억이 있다. 한 페이지를 만드는데 3가지 다른 화면을 만들어야해서 완전 하드 코딩했었다. 그 당시 em, rem, vw, vh라는 단위가 있다는건 알았지만 뭔가 어렵게 느껴져서 사용할 엄두도 못 냈었다. (공부를 안 했으면서 핑계는..) 그래서 이번에는 상대단위에 대한 개념을 잡고..

220723 TIL 또 대충 할거야? [내부링크]

의미 있는 마크업 오늘은 또다시 HTML과 CSS에 대해 배웠다. html은 이전에 배웠던 내용들과 다르게 어려운 느낌이다. 이전에 한 번 웹페이지 클론 코딩을 해봤기 때문에 html에 대한 내용이 이해가 안 돼서 어렵다기보다는 html에 태그가 엄청 많기 때문에 어떤 태그들을 써야 의미 있게 내용을 전달할 수 있을지에 대한 어려운 느낌이다. 알고 있는 태그는 몇 개 없었기 때문에 공부해야 할 태그가 엄청 많았다.. div, span, a, p 요런 기본적인 것들만 알고 있었다. 이 많은 html태그를 이용해 모든 부분에 대하여 이유를 가지고 의미를 밝혀가며 HTML을 작성을 하는 과정이 이전에는 없었다. 즉, 이전 과제로 웹 클론 코딩할 때는 의미 있는 마크업에 대해서 신경을 쓰지 않았다는 이야기다. ..

메가테라 5주차 회고 [내부링크]

5주 차 회고 메가 테라 5주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 잘해야 된다는 압박감 이번 주는 레벨테스트 주간이었다. 사실 주말에 레벨테스트 과제가 올라왔을 때 벌써라는 느낌을 받았다. 왜냐하면 http에 대해서 한번 더 배우고 테스트를 할 줄 알았기 때문이다. 마음의 준비를 하지 않은 상태에서 테스트를 마주하니까 겁부터 났다. 이전에 레벨테스트를 한 번 떨어지고 이번에도 떨어지면 그때는 정말 끝이기 때문에 잘해야 된다는 엄청난 압박감을 갖고 시작했다. 그렇게 시작된 레벨테스트 서비스 기획 초기 당시 내가 만들고 싶은 서비스는 주말에 완성시켰다. 필수 구현 기능인 게시판 기능과 랜덤으로 명언이 주어지는 기능이다. 이전에 레벨 테스트했을 때는 게시판 기능을 만드는데만 일주일이 동안 겨..

220722 TIL 아직 끝나지 않았다 [내부링크]

레벨테스트 성공적(?) 오늘은 기다리고 기다리던 레벨테스트 발표날이었다. 이전에 한번 떨어지고 다시 하는거라 이번에도 통과하지 못하면 이번 주가 메가테라의 마지막이라는 생각을 하고 있어서 시작할 때부터 이번에는 진짜 잘해야 한다는 엄청난 부담을 안고 시작했다. 레벨테스트의 결론부터 말하면 이번에는 다행히 모두 통과했다. 이번주가 끝이 아니라는 의미다!! 발표시간에 동료들 발표하는 작업물을 보면 확실히 저번보다 훨씬 프로그램이 구색이 갖쳐줬고 다양한 기능들을 볼 수 있었다. 다들 많이 노력한게 결과물로 보인 순간이었다. 프로젝트를 만들었던 과정들을 돌아보면 중간중간 원하는 대로 기능 구현이 안되면 짜증도 나고 엄청 답답한 순간도 많았지만 기능이 원하는 대로 딱 구현되는 순간 답답함과 짜증이 한 번에 날아가..

220721 TIL 할 수 있다면 할 수 있다. - 피카소 [내부링크]

6일차 작업 일지 오늘은 프로젝트 작업을 전반적으로 리팩터링 하는데 신경을 썼다. 당장 내일이 발표다 보니까 새로운 기능을 추가하기 보다는 저번처럼 발표하다가 오류가 발생하는 대참사가 벌어지지 않게 최대한 프로그램을 계속 사용하면서 문제를 찾고 수정하는 작업을 했다. 6일 차 구현 계획과 고민했던 부분을 적은 isuue이다. 첫 번째로 발견한 문제는 평점을 계산한 결괏값이 3.666666 이런 식으로 나올 때가 있다. 이게 왜 문제가 되냐면 화면에 평점이 나오도록 했는데 소수점이 길어지면 화면에 글씨가 벗어나는 문제가 발생했다. 그래서 소수점을 첫째 자리만 보이게 소수점 둘째 자리에서 반올림하는 식을 추가해서 해결해 줬다. 다른 명언 어플 보니까 명언과 함께 제공되는 배경이미지도 랜덤으로 바뀌는 것을 확..

220720 TIL 목적을 잊지 말자 [내부링크]

오늘 목표로 했던 작업은 지금까지 작성한 코드들을 관심사에 따라 분리하는 게 1차적인 목표였다. 지금까지 관심사의 분리고 뭐고 아무것도 신경 안쓰고 일단 기능이 구현되도록 했기 때문에 코드들이 엉망진창이었다. 예를 들면 평점을 계산하는 메서드가 Panel클래스에 들어가 있고 랜덤으로 문장 나오게 하는 메서드도 첫 패널에 들어가있고 아무튼 엉망진창이다. 패널이나 프레임 클래스가 많아지다 보니까 발생하는 일이 분명 평점 계산하는 메서드를 작성했는데 어떤 패널에 넣어놨더라.. 하면서 뒤죽박죽 되어있는 내 클래스들에서 내가 작성했던 메서드가 어디 있는지 찾는데도 시간이 좀 걸렸다. 그래서 오늘은 마음먹고 각 기능의 역할에 따라 분리를 해주려고 했다. 이게 왜 마음먹고 해야 하는 일이냐면.. 이전에 todolis..

220719 TIL 포기하기 전에 마지막으로 한 번 더 [내부링크]

오늘은 드디어! 이틀 동안 고민하고 고민하던 책의 평점순에 따라 책 목록을 보여주는 기능을 구현했다. 사실 평점순으로 나열하는 기능은 오후 4시쯤 구현을 했다. 진짜 어제부터 계속 고민하던 문제라서 평점이 내림차순으로 정렬이 된 걸 보고 정말 정말 기뻤다. 오늘 고민했던 내용들을 적어 놓은 건데 2번째 내용이 어제부터 계속 고민했던 부분이다. 그런데 오늘 문득 String형 자체를 내림차순 할 수 있지 않을까? 생각을 했다 어제부터 계속 내림차순 하려면 int형처럼 숫자형이여 된다는 생각을 계속하고 있었다. 그래서 쓸데없이 List 평점만 가져온다는 생각을 계속하고 있었다. 그럴 필요 없이 책 정보가 담긴 csv파일 맨 앞에 평점을 써준 뒤 이 String자체를 내림차순 하면 될 것 같다는 생각을 했다...

220718 TIL 우선순위가 이게 맞나 싶지만 우선 진행해 [내부링크]

오늘은 아침에 생각난 기능을 하나 더 추가하는 작업을 진행했다. 책 추천 서비스인데 사용자들이 자신이 읽은 책 중에서 추천하고 싶은 책을 게시판에 올려놓으면 그 책에 대해서 평점을 줄 수 있다. 그 주어진 평점을 기반으로 평점 순으로 책을 리스트업 하는 기능이다. 지금까지 구현해놓은 기능과 구현하면서 했던 고민들을 적어놨다. 지금은 책에 대해서 평점을 줄 수 있는 기능과 평점이 계속 누적이 될 수 있도록 기능을 구현해 놓은 상태이다. 이 기능의 핵심은 평점 순으로 책을 목록에서 볼 수 있게 하는 건데, 이 기능을 구현할 때 막혀버렸다. 현재 책에 대한 정보를 담고 있는 파일이다. 책의 정보를 담은 파일의 형태는 , , , 순이다. 파일을 불러올 때 이 정보를 List에 담는데 String형으로 담는다. ..

220717 TIL 상대방의 말을 귀담아 듣자! [내부링크]

어젯밤에 계속 고민했던 List를 하나 써도 글 수정하기 기능이 구현이 되는지에 대해 오늘 아침에 동료분에게 질문을 했다. 사실 어젯밤에도 List 하나로 글 수정하기가 될까요?? 계속 물어봤었다. 동료분이 가능할 것 같다고 계속 말씀해 주셨는데 어젯밤에는 사실 머릿속으로 List하나로 어떻게 글이 수정이 되지?라는 생각이 계속 들어서 동료분이 말하시는 거를 크게 생각하지 않았다. 그리고 오늘 아침 동료분이 List하나로 글 수정하기 기능을 구현한 걸 보고 그제야 동료분이 설명해주시는 게 귀에 들어오기 시작했다. 나는 생각보다 고집이 있는 편이라고 생각한다. 상대방이 말을 해도 그 말이 내 머릿속으로 논리가 맞지 않다고 생각하면 잘 듣지 않는 편이었다. 옛날부터 친구들이랑 이야기할 때도 내가 관심 있는 ..

220716 TIL 또 다시 시작 레벨테스트 [내부링크]

오늘은 낮에 새로운 강의가 올라올 줄 알았지만 아니었다. 기다리기도 했지만 기다리지 않은 레벨테스트가 다시 시작됐다. 아직 레벨테스트를 할 준비가 됐다고 생각하지는 않지만 다음 주가 된다고 해서 준비가 될 것 같지는 않다. 그냥 빨리 하자.. 레벨테스트는 저번에 진행했던 레벨테스트와 크게 다르지 않다. 게시판이 기능이 포함된 애플리케이션을 만드는 것이다. 뭘 만들까 한참을 고민했다. 이전에는 초기에 기획했던 기능들을 거의 구현하지 못했기 때문에 이번에는 구현할 수 있을 것 같은 기능들로 어떤 애플리케이션을 만들 수 있을지 생각을 오래 했다. 그래서 이번에 만들기로 한 서비스는 "Daily Sentence"라는 게시판 서비스이다. Daily Sentence 서비스는 매일매일 그날 사용자의 기분에 적합한 문..

메가테라 4주차 회고 [내부링크]

4주 차 회고 메가 테라 4주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 마감시간 이번 주는 9시, 12시라는 마감시간에 쫓겨 살았다. 이게 무슨 말이냐면 9시까지는 과제 제출, 12시까지는 til작성을 마무리해야 했다. 9시 안에 과제를 어떻게든 1차적으로 완성시키고 github에 pr을 보내야 코드 리뷰를 받을 수 있었다. 코드 리뷰를 받아야만 내 코드에서 어디가 잘못되었고 어디를 고쳐야 할지 알 수 있기 때문에 과제를 완성시키기 위해서는 트레이너님들의 리뷰가 필수적이다. 리뷰를 받고 리팩터링 하는 과정도 쉽지 않았다. 1차적으로 완성시킨 작업물은 진짜 어떻게든 완성시킨 작업물이라 리팩터링 해야 할 부분이 상당히 많았다. 네이밍부터 관심사의 분리, 추상화 등등 전혀 처음 만들 때는 전혀 고..

220715 TIL 어렵다. 코딩 [내부링크]

최근 들어 코딩 테스트 문제를 못 풀고 있다. 마카오 뱅크, 깐깐한 계산기, todolist 만들기 등등 다양한 과제 속 한줄기의 빛 같던 코딩 도장 시간이 점점 싫어지기 시작했다. 왜?????? 문제를 풀지 못하니 당연히 재미가 없다.. 이전에는 그래도 코딩 문제 푸는 시간이 가장 좋았었는데.. 쉬워서 그랬나?? 이전에 코딩 도장 문제 풀 때는 시간이 여유가 있어서 한번 풀고 다른 방법으로 풀 생각을 하곤 했는데 이번 주 들어서부터 한 문제를 제대로 풀기가 어려웠다. 5분 정도 남기고 겨우 풀 때도 있었고, 어제와 오늘은 문제를 해결하지도 못했다. 코딩도장의 난이도가 올라간 건가?? 아니다. 프로그래머스 기준 level 1문제를 똑같이 풀고 있는데 날이 갈수록 코딩 도장 문제를 해결하는데 어려움을 느끼..

220714 TIL 네이밍, 창작의 고통 [내부링크]

오늘은 이전에 만들었던 계산기 프로그램에 대해서 코드 리뷰를 받았다. 리뷰 내용 중 가장 많이 차지했던 부분은 함수, 변수의 네이밍이 옳은지에 대한 리뷰를 많이 받았다. 지금까지 과정을 진행하면서 네이밍을 하는 게 정말 중요하다고 계속 들어왔다. 예를 들면 프로그래밍을 1도 모르는 사람이 코드를 봤을 때 이름을 보고 이 변수나 함수가 무슨 역할을 하는지 알기 쉽게 작성해야 한다고 했다. 그래서 지금은 프로그래밍을 할 때 최대한 의식적으로 메서드나 변수의 이름을 축약어 사용하지 않고 이름만 보고 무슨 역할을 하는지 파악할 수 있게 작성하려고 하고 있다. 그래서 계산기 만들때도 최대한 이해하기 쉽게 작성했다고 생각했는데 그에 대한 리뷰가 달리니 어떤 이름을 지어야 할지 더 이상 생각이 나지 않아 오후에 나의..

220713 TIL 안다고 착각하지 말자 [내부링크]

오늘은 짝프로그래밍 하면서 느낀 점들을 써보려고 한다. 오늘 짝프로그래밍으로 만드는 주제는 마카오뱅크였다. 매일 하는 짝프로그래밍이지만 오늘 짝프로그래밍은 동료분의 끝없는 질문이 나의 말문을 막히게 했다. "이거는 왜 이렇게 쓰이죠?", "이거는 왜 그런가요?" 등등 코드에 대해 이해를 할 수 있어야만 대답할 수 있는 질문들을 계속 받았다. 사실 마카오뱅크의 코드를 이해하기보다는 외웠기 때문에 저 질문에 답을 명확하게 할 수 없었다. 만약 동료분이 질문을 해주지 않았다면 나는 매일 반복 인출 학습으로 코드를 외웠기 때문에 코드를 치면서 안다고 착각했을것이 분명하다. 하지만 동료분이 질문을 해서 질문에 대한 대답을 못하는 나를 보고 이 코드에 대해서 모르고 있다는 것을 인지할 수 있었다. 우리가 매일 짝프..

220712 TIL 할 수 있다. 아니 해야 한다. [내부링크]

"내가 할 수 있을까???", "만들 수 있을까??" 등등 최근 들어 많이 하는 생각의 종류들이다. 과제를 시작하기도 전에 혹은 문제를 풀기 전에 그 문제를 보면 항상 "아 이걸 어떻게 하지?"라는 생각부터 든다. 매번 시작하기도 전에 지고 시작한다. 즉, 항상 자신감이 없다. 자신감이 없는 이유는 아마도 지식과 이해가 떨어지기 때문이라고 생각한다. 만일 내가 공부를 많이 해서 완벽히 알고 있다면 매일 주어지는 과제와 퀘스트를 해결하면서 성취감을 느낀다면 재미도 있고 자신감도 많이 올라갈 거라고 생각한다. 하지만 지금의 나는 과제를 하다 보면 항상 막히는 부분이 있고 막히는 부분을 해결을 할 때 속 시원하게 해결한 적이 별로 없다. 혼자서는 해결 못하는 문제들도 많았다. 그러다 보니 흥미가 떨어질 때도 ..

220711 TIL 문제의 핵심을 파악하기 [내부링크]

깐깐한 계산기 오늘은 새로운 퀘스트가 주어지는 날이다. 이번 주는 퀘스트가 2개가 주어졌는데 하나는 "깐깐한 계산기", 하나는 저번 주와 동일한 주제인 ToDoList 만들기였다. 계산기 만드는 퀘스트는 이번에 주간 과제에 TDD 활용해서 계산기 만드는 과제가 있어서 문제일 거라고 추측을 했다. 그리고 제목에 "깐깐한"이라는 수식어가 붙은걸 보고 계산기가 깐깐하면 얼마나 깐깐하겠어??라고 생각하면서 퀘스트를 보기도 전에 얕봤다. 깐깐한 계산기의 요구사항을 처음 봤을 때는 솔직히 크게 어려워 보이는 느낌은 아니었지만 막상 해보니까 조건들이 많아서 그런지 까다로웠다. 그래서 깐깐한 계산기구나.. 이 문제의 풀기 위해서 내가 검사해야 할 조건은 크게 두 가지라고 생각했다 1. 문자열의 길이 2. 입력받은 식의..

220710 TIL 걸어서 객체 속으로 [내부링크]

어젯밤에 본가에 내려가기로 마음먹고 아침 일찍 일어난 뒤 오랜만에 본가에 내려가기로 했다. 아무래도 자취를 하다 보니까 잘 안 챙겨 먹게 되었다. 누구나 그렇듯 밥이 있으면 먹는 건 잘하는데 자취를 하면 내가 해야 하니까 그 행위 자체가 귀찮아서 안 먹다 보니까 최근에 크게 아팠던 게 아닐까 추측해본다. 나라는 객체가 밥을 먹는 행동을 하지 않아서 아프다는 상태로 변하게 되었다.. 결국 객체지향에서나 현실에서나 행동이 상태를 결정짓는다는 중요한 사실을 잊으면 안 된다. 이른 시간에 버스터미널에 도착했지만 사람이 꽤나 많았다. 버스를 오기를 기다리면서 자리에 앉아서 주변을 둘러보는데 여느 때와 다름없이 모두 핸드폰을 하는 것을 볼 수 있었다. 누군가는 중요한 업무를 하고 있을 수 도 있고, 누구는 웹 쇼핑..

220709 TIL 객체지향은 너무 어려워 [내부링크]

오늘은 아침 일찍 집 앞에 도착한 손님이 있었다. 바로 "객체지향의 사실과 오해" 책이다. 아무래도 계속 객체지향에 대한 개념이 많이 부족하다고 생각했기 때문에 이 책을 읽으면 객체지향에 대해서 이해하는데 도움이 될 거라고 생각하고 빨리 읽기 위해 어제 주문했고 오늘 책의 절반 정도 읽겠다고 했었는데 아직 절반을 다 읽지 못 한상 태이다. 내용이 어렵게 느껴져서 느리게 본 이유도 있고 개인적으로 원래 책 읽는 속도가 느린데 내용이 잘 이해가 되지 않는 부분들이 있어서 글을 반복해서 읽어서 많이 읽지 못한 것 같다. 우선 책의 초반에는 객체에 대해 많은 설명을 한다. 내가 3주 차 때 객체에 대해 공부하고 정리할 때는 간단히 "객체란 단순히 우리 주변에서 실존하는 모든 것"이라고 정의를 내리고 끝냈는데 이..

메가테라 마음만은 9주차 회고 (사실은 이월 3주차) [내부링크]

이월 3주 차 회고 메가 테라 이월 3주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 새로운 3주 차 이번 주는 이월된 주라 강의를 보면서 약간 복습하는 느낌을 받을 줄 알았는데 새로운 내용을 배우는 느낌도 받았다. 이런 느낌을 받으면서 들었던 생각은 내가 기존 3주 차 공부할 때 얼마나 소홀히 공부를 했는지 깨닫게 되며 다시 한번 반성하게 되었다 이월되고 다시 맞이하는 3주 차는 학습 가이드에 따라 공부하는 방식을 바꿨다. 이번에는 강의를 보면서 전체적인 흐름과 아샬님이 무엇을 하시려고 하시는지 최대한 파악하려고 했고 강의 보다가 모르는 개념이 나오면 메모해놨다가 강의가 끝나고 찾아본 다음에 개념노트에 정리하는 방식으로 공부했다. 그리고 따로 학습 키워드가 제공되어서 그 학습 키워드들도 개념노..

220708 TIL 기승전 마카오 [내부링크]

도전과제 마카오 뱅크! 오늘은 원래라면 금요일 골든벨이 끝나고 짝 프로그래밍을 했었는데 오늘은 도전과제가 주어졌다. 도전과제의 타이틀은 역시나 마카오 뱅크 (기승전 마카오!!) 도전과제 마카오 뱅크는 기존에 학습했던 내용에서 조금 더 심화된 버전의 마카오 뱅크의 기능을 구현하는 것이었다. 도전과제 요구사항을 딱 처음 봤을 때는 음.. 어떻게 해야 하지??라는 생각이 역시나 제일 먼저 들었다. 나는 코딩 도장 문제를 풀 때도 그렇고 문제를 딱 보고 해결방안이 바로 떠오르지가 않는다. 그래도 요구사항을 이해하기 위해 차근차근 읽어보니까 원래 만들었던 것에서 조금만 더 수정하면 될 것 같은 느낌이었다. 항상 트레이너님들이 하시는 말씀이 어떻게든 완성을 시켜야 하는 게 좋다고 하셨기에 이번 주 퀘스트였던 tod..

220707 TIL 생성자란?? 모르는게 너무 많아.. [내부링크]

오늘은 생성자에 대해서 공부를 했다. 생성자를 공부하게 된 계기는 지금 ToDoList 만들기 과제가 한창인데 내가 만든 todolist코드에 대해 트레이너님이 리뷰 해주신 내용 중 생성자에 대해서 더 공부하는 게 좋을 것 같다는 리뷰가 있어서 생성자를 알고 사용하기 위해 오늘 알아봤다. (사실 코드 리뷰 올라온 거는 시간이 꽤 지났는데 아프다는 핑계로 미루고 있었습니다.. 죄송합니다..) 생성자를 공부하다 부가적인 개념들이 더 나와서 의존성 주입, this에 대해서도 짤막하게 정리해봤다. 생성자 일반적으로 클래스를 가지고 객체를 생성하면, 이 객체의 모든 인스턴스 변수는 아직 초기화되지 않은 상태인데 인스턴스 변수를 별도로 초기화하지 않으면 자동으로 초기값으로 초기화가 된다. 생성자는 인스턴스가 생성될..

220706 TIL static이 뭔지는 알고 쓰자 [내부링크]

짧게 나의 상태를 말하면 어제보다 조금 아주 조오금 나아졌다. 오늘 낮에 병원에 가서 수액도 맞고 해서 열이 많이 내렸다. 하지만 목은 더 아파졌다. 어제는 뭘 먹거나 침 넘길 때는 안 아팠는데 오늘은 물을 먹든 뭐를 먹든 목구멍에 넘기려 하면 고통도 같이 온다. 병원 가서 코로나 검사를 또 했는데 이번에도 음성이 나왔지만, 모든 증상이 나를 코로나라고 가리키고 있다.. 나 코로나 걸린 건가..? Static 왜 써? 매번 intellj 킬 때 가장 먼저 쓰는 public void static main(String[] args) 에서 static을 알아보자 지금까지는 그냥 저 문장을 써야 프로그램이 실행되니까 계속 써온 느낌이었다면 이제는 알고 쓰기 위해서 정리를 해봤다. Static static의 의미..

220705 TIL 아프면 개고생이다. [내부링크]

시작하기 전에 오늘 TIL은 약간 찡찡대는 점 인지해주세요 ㅠㅠ 지금 TIL 쓰는 나의 몸 상태는 근 1년중에 제일 최악이다. 어제 아침부터 잔 기침이 계속 나더니 오늘 아침에 일어나니까 목이 엄청 컬컬하고, 따가웠다. 시간이 지날수록 열도 나고 좀 어지러워서 어? 나 코로나인가? 생각이 드는 것이었다. 그래서 저번에 하나 사놓은 자가진단키트를 했는데 일단은 음성이 나오긴 했는데 그렇게 막 정확하지 않다니까.. 일단은 급한대로 집에 있는 해열제 하나 먹고 버텼는데 오전에 점점 어지럽고 기침이 계속 나서 도저히 코딩 도장 문제를 못 풀겠는 것이었다. 그래서 빨리 병원을 가서 진료를 받았는데 목이 부었고, 면역력이 엄청 떨어져서 비타민C랑 처방해주신 약 잘 챙겨 먹으라고 하셨다. 비타민C 1일 섭취량이 20..

220704 TIL 미라클모뉭?? [내부링크]

오늘은 5시 30분에 일어났다. 미라클 모닝을 시작했기 때문이다. 갑자기 미라클 모닝을 하게 된 이유는 어젯밤에 공부하다가 미라클 모닝을 하고 있는 동료 한분이 같이 하자고 제안을 했기 때문이다. 미라클 모닝을 하면 좋은 이유들도 말씀해주셨는데 죄송하지만 지금 생각해보면 기억이 하나도 안 난다.. ㅋㅋㅋㅋㅋ 그럼 왜? 했냐고요?? 좋다잖아요.... ㅋㅋㅋㅋㅋㅋ 옛날부터 아침에 빨리 일어나면 성공할 수 있다는 이야기를 많이 듣기도 했고.. 좋은 건 다 하고 싶은 아이랍니다.. (팔랑귀) 뭐 좋아서 한 이유도 있고 너무 졸려서 당장 자고 내일 아침 일찍 일어나서 하는 것도 나쁘지 않다고 생각해서 오늘 하루 하게 되었다. 근데 무서웠던 건 아침에 잘 일어나는 사람은 많이 없겠지만 나는 정말 아침에 일어나는 것..

220703 TIL 나는 간절한가? [내부링크]

나는 지금 간절한가?? 나는 무언가에 대해서 딱 한번 간절했던 적이 있다. 편입 공부를 할 때 정말 간절하게 합격하고 싶었고 간절한 만큼 공부를 했었던 것 같다. 간절함은 무언가를 계속하기 위한 최고의 원동력이라고 생각한다. 편입 공부할 때 간절함이 어디서 나왔는지 생각해보면 뒤 없이 편입 공부를 시작했기 때문이라고 생각한다. 그 당시 편입 공부를 하기로 마음먹었을 때 무슨 자신감이었는지는 모르겠지만 편입에 떨어진다는 생각은 하지 않았었다. 그렇다고 영어를 잘하지도 않았다. 오히려 영어를 못하는 편이었다. 절대 떨어지지 않는다고 마음을 먹었던 이유는 떨어졌을 때 뒤가 없었기 때문이다. 뒤가 있는 간절함은 간절함이 아니라고 생각해서. 나를 더 벼량 끝으로 몰았었다. 그렇기 때문에 저절로 간절해졌고 간절한 ..

220702 TIL 아는만큼 보인다 [내부링크]

오늘은 서울에 사는 동료분들과 오프라인으로 같이 공부를 했다. 일주일간 프로젝트 만든다고 밖에 나가지도 않고 집에서만 하다가 오랜만에 비도 안 오고 날씨도 너무 좋아서 기분도 평소보다 더 좋았다. 장소는 어린이대공원에 있는 "오랑"이라는 공간에서 했다. 오랑은 청년들이 모여서 공부할 수 있는 공간을 무료로 제공해주는 곳이다. 스터디 카페나 카페 같은 곳에서 오랜 시간 공부하려면 비용이 만만치 않은데 오랑같이 무료로 공간을 제공해주는 곳이 있는 걸 보고 대한민국이 살기 좋은 나라인걸 다시 한번 깨닫는다. ㅋㅋㅋㅋ 심지어 에어컨도 빵빵해서 추웠다..! 오늘 날씨는 좋긴 했지만 워낙에 더위를 잘 타서 걷기만 해도 땀나는 날씨였는데.. 우리는 10시에 만나서 5시까지 오랑에서 뽀모도로를 하면서 같이 공부를 했는..

220701 TIL 어떻게든 완성시키자! [내부링크]

오늘은 하루 동안 많은 일이 있었고, 하루를 끝마치고 느끼는 감정은 홀가분함이다. 무슨 일들이 있었는데 홀가분하냐고요?? 우선 대표적으로 한 주간 진행되었던 게시판 만들기 프로젝트가 끝났다.!! 한 주간 이 프로젝트에 쏟은 시간과 노력은 8주간 가장 공들였다고 생각한다. 하루에 3~4시간씩 자면서 안되면 좌절도 하고 되면 텐션 올라가고 감정이 롤러코스터급으로 오르락내리락했다. 원래 감정 기복이 심한 편은 아닌데.. 이번 주가 유독 그랬고, 코드의 실행 결과에 따라 일희일비했던 한 주였다. 코스 이월 오늘 중 가장 큰 이벤트는 아무래도 이월이 결정된 게 아닐까 싶다. 나는 오늘 이번 프로젝트를 끝남과 동시에 이월이 결정이 되었다. 이월이라니.. 메가 테라 과정을 시작하기 전 이월에 대한 설명을 홀맨님께 들..

메가테라 8주차 회고 [내부링크]

8주 차 회고 메가 테라 8주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 이게 개발인가?? 이번 주 8주 차를 끝내면서 한 주 동안 가장 많이 했던 말을 뽑으라면 "아니, 도대체 이게 왜 안돼?"였다. 그리고 또 "이게 왜 돼?" 하는 경험도 있었다. 정말 이 짤이 매우 공감되던 한 주였다. 삭제하기 기능을 구현하려고 이틀간 애를 먹었었다. 내 논리대로 이렇게 이렇게 하면 삭제가 되겠지? 하고 작성했던 코드들이 모두 안돼서 좌절하고 있던 중 자포자기하는 심정으로 생각 없이 그냥 손 가는대로 코드 몇 줄을 메서드에 추가했더니 갑자기 삭제하기가 되는 거였다. 응?? 이게 왜 되는 거지?? 당황도 했지만, 이틀간 삭제하기가 골칫거리였기 때문에 작동하는 걸 보고 정말 좋았다. 약간 저번에 지그재그 문..

220630 TIL 기획의 중요성 [내부링크]

오늘은 최소한의 게시판의 기능을 구현했다. 이때까지 애먹던 수정하기, 삭제하기까지 오늘 완성했는데 처음에는 안되던 기능을 구현했다는 사실 자체만으로 기분이 너무 좋았다. 레이아웃은 전혀 신경 쓰지 않았기 때문에 모양은 정말 이상하지만 어쨌든 게시판 시늉은 하고 있는 것 같았다. 근데 다 만들고 나의 코드를 보는데 분명 내가 작성한 코드인데도 내가 봐도 이해하는데 오래 걸렸다. 코드 구조가 정말 복잡하게 돼있었다는 것을 지금에서야 깨달아버렸다. 코드가 복잡하다 보니 어디 하나 고치거나 추가하려면 시간이 정말 많이 걸렸다. 시작부터 잘못되었다는것을 너무 늦게 알아버린 것이었다. 프로젝트를 시작할 때 코드를 어떻게 짤지 설계하고, 코드 구조를 구상했어야 했는데 나는 그냥 그런 작업 없이 바로 생각나는 대로 코..

220629 TIL 이게 왜 안돼???? [내부링크]

오늘은 코딩 도장 이야기로 시작하려고 한다. 요즘은 코딩 도장을 프로그래머스 사이트 level 1문제를 풀고 있다. 아무래도 level1문제다 보니까 이전에 풀었던 지그재그 문제나 Spiral Matrix 같은 문제보다 훨씬 쉽다. 그러다 보니 문제를 딱 보고 바로 풀이법이 떠오르고 문제를 해결하는데 까지 얼마 걸리지 않는다. 지그재그를 일주일 만에 풀었던걸 생각하면 프로그래머스 level1문제들은 아주 나를 기분 좋게 한다. (level이 높아지면 또 나를 괴롭히겠지..) 오늘의 프로그래머스 문제는 "약수의 합"이다. 이 문제를 보고 바로 for문 쓰면 되겠다 생각하고 10분 만에 풀었다. 그리고 든 생각은 50분이나 남아서 이렇게 쉬운 문제 풀 때 빨리 stream을 사용해보면서 stream 사용법을..

어떻게 공부할 것인가 [내부링크]

메가테라 북 스터디의 첫 번째 책 "어떻게 공부할 것인가" 제목만 보면 지금 내 상황에 가장 필요한 책이다. 사실 아직 책을 다 읽은건 아니지만 범위가 정해져 있어서 읽은 내용에 대해서 느낀 점을 써보려고 한다. 책을 보면서 이 책에서 나오는 비효율적이라고 말하는 학습방법들(단순 반복 읽기, 중요한 내용 밑줄 치기 등)이 이때까지 내가 하고 있는 학습방법이었다. 비효율적인 거는 다 하고 있었다... 그러면 효율적인 공부 방법이 뭘까? 배우려면 먼저 인출하라 나는 지금까지 새로운 지식이나 기술을 배울 때는 단순히 많이 보는 반복학습을 위주로 학습해왔다. 하지만 이 책을 보고 이 방법은 좋은 방법이 아닐뿐더러 금방 잊어버린다는 점을 알게 되었다. 사실 학생 때부터 공부를 할 때 인출을 해야 한다는 것을 어느..

220628 TIL 한번 할 때 제대로 하자 [내부링크]

오늘은 어제 해결하지 못했던 작업이 있어서 오늘은 꼭 해결하겠다고 다짐하고 하루를 시작했다. 어제 해결했어야 했던 목표는 글을 작성했을 때 글의 제목만 각 페이지에서 조회할 수 있도록 하는 기능을 구현하는 것이었다. 처음에는 코드를 다 작성하고 실행을 시켰는데 글 작성은 되는데 글의 제목이 페이지에 보이지 않는 것이었다. 뭐가 잘못됐나? 생각하고 차근차근 코드를 순서대로 보는데, 아무리 봐도 내 머리는 이게 맞는데?라고 생각하고 있었다. (이게 왜 안돼??????) 그리고 이 문제를 해결하기 어려웠던 점은 지금까지의 intellij는 코드가 잘못되면 실행이 안되고 빨간 줄이 떠서 여기가 잘못됐으니 고쳐라!라고 아주 친절하게 알려줬었는데 그런 것도 없이 잘 실행은 되는데 내가 원하는 기능은 작동하지 않아서..

220627 TIL 목표는 하루하루가 모여 이루어진다 [내부링크]

오늘은 집중을 정말 1도 못한 하루였다. 어제 todolist를 꼭 만들고 자겠다고 다짐했지만 결국에는 만들지 못하고 새벽 늦게 잠을 잤다. 늦게 자는 게 반복되다 보니 몸에 피로가 점점 누적되는 느낌이었고, 너무 피곤해서 계속 졸았던 것 같다. 정신 차리자..! 아직도 이번 주 금요일까지 게시판을 구현할 수 있을까 하는 걱정으로 가득 차 있지만 그래도 금요일까지 게시판을 구현하기 위해 체크리스트 형식으로 일일 계획을 작성해서 눈앞의 할 일을 하나씩 해치우는 중이다. 오늘은 4개의 계획을 세웠는데 지금까지 3개를 완료했고 til 작성하고 나머지 1개의 계획을 부수러 갈 생각이다. 하루 계획을 세운 기준은 오늘 당장 제출해도 게시판이라는 역할을 할 수 있게 핵심적인 기능만 일단 만드는 것을 목표로 잡았다...

220626 TIL 피드백은 빠를수록 좋다 [내부링크]

오늘은 todolist를 만들어야 게시판을 만들 수 있다는 이야기를 듣고 오늘의 작업 목표를 todolist를 만드는 것으로 정했다. 그래서 오후 2시쯤 동료들 모두 모여서 짝 프로그래밍으로 todolist를 만들기를 시작했다. 솔직히 처음에는 만들어야 할 todolist 페이지 사진을 보고 저 정도면 그래도 금방 만들지 않을까? 생각했고, 초반에는 예상대로 수월하게 진행이 되었다. 우리가 뭐를 만들어야 하는지, 어떤 기능들을 구현해야 하는지 먼저 적어놓고 완료할 때마다 완료 표시하고 넘어가는 식으로 진행했다. 정말 간단하게 TOLIST 제목에 해야 할 일을 적을 수 있는 칸과, 확인 버튼까지 만들고, 확인 버튼 눌렀을 시에 입력한 할 일을 밑에 한 줄씩 출력하는 기능도 구현했다. 여기까지 정말 수월하..

메가테라 온보딩키트 언박싱 후기!!!!! [내부링크]

새벽에 공부하다 졸려서 쓰는 메가테라 온보딩 키트 후기!!! 6/25일 토요일 오후에 미용실을 갔다가 집에 돌아오는데 문 앞에 엄청 큰 박스 하나가 떡하니 놓여있었다. 박스 위에 포스트잇으로 내 이름이 적힌 걸 보고 아 금요일에 트레이너님이 온보딩 키트 발송해주셨다고 했는데 그게 벌써 도착했구나!!! 설레는 마음에 갖고 들어가자마자 뜯어 버렸다.. 생각보다 박스가 커서 낑낑 대면서 들어감.. ㅋㅋㅋ 박스가 큰 만큼 기대감 증가!! 요놈봐라 박스 안에 뭐가 들었길래 이렇게 커? 중얼거리면서 딱 열었더니..! 박스 안에는 검정색 박스가 하나 더 들어있었다. 뭐야 이 멋지게 생긴 상자는?? 이것도 꽤나 부피가 컸고 세련된 느낌이라 더 설레기 시작 ㅋㅋㅋㅋ 손은 점점 빨라지고.. 또 박스를 딱 열었더니 이지연 ..

220625 TIL 시작은 언제나 불만족 [내부링크]

시작은 설렘과 두려움으로.. 금요일 저녁에는 내일 무슨 과제가 올라올지 항상 기대 반 두려움 반으로 기다린다. 이번 주 과제는 개인 프로젝트 주간(사실은 레벨테스트라고 하신다..)으로 지금까지 배운 자바 기초 과정을 바탕으로 내가 만들고 싶은 게시판을 웹사이트로 만드는 게 이번 주의 과제였다. 아침에 딱 이게 과제라는 것을 보고는 솔직히 막막했다. 분명 7주간 많은 것을 배웠지만 이걸 활용할 수 있을까?라는 생각을 많이 했었는데 진짜 이제는 내가 배운 내용들을 활용해야 하기 때문에 걱정이 먼저 앞섰다. 우선 게시판의 필수 기능으로 목록 보기, 글 작성, 상세 페이지, 수정하기, 삭제하기 가 기본 베이스로 들어가야 하는데 이걸 어떻게 만들지.. 한참을 생각했다. 그래도 일단 당장 오늘 3시까지 만들고 싶은..

220624 TIL 소통하면서 함께하기 [내부링크]

솔직하되 신중하자 오늘 주간 회고를 하던 도중 동료들과 소통이 부족하다는 것을 느꼈다. 주간 회고 시간에 이야기를 하다 고양이를 키우시던 동료분의 집에 있는 캣타워 사진을 보고 "저도 고양이 키우고 싶어요, 돈 벌면 고양이 집사 되는 게 제 버킷리스트예요!!"라고 말했더니 전혀 몰랐다고 한다. 가끔 zep화면에 키우시는 고양이가 나왔는데 그때마다 말없이 귀엽게 쳐다보고만 있었기 때문에 고양이 좋아하시는 줄 몰랐다고 하셨다. 사실은 고양이 유튜브도 찾아보고 구독해놓고 챙겨볼 정도로 고양이를 좋아하는데... ㅋㅋㅋㅋ 당연히 말을 안 했으니 동료분은 모를 수밖에 없다. 내 성격이 남에게 내 감정이나 생각들을 잘 표현하지 않는다. 어릴 때부터 그랬던 거 같다. 왜 그렇게 됐는가 생각해보면 사람은 모두 다 다른 ..

메가테라 7주차 회고 [내부링크]

7주차 회고 메가테라 7주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 더 늦기전에 당장 시작해라 벌써 메가테라 과정을 7주 차를 마쳤다. 이번 주 골든벨 시간에 나의 공부하는 방식이 잘못되었다는 점을 알게 되었다. 메가테라 과정이 7주 차가 지났는데 지금에서야 잘못되었다는 것을 인지했다는 게 너무 미련하고 늦었다고 생각한다.. 생각만 해서 뭐하는가 빨리 뭐가 문제였고 어떻게 하면 해결할 수 있을지 적어보자 우선 골든벨 시간에 학습방법이 잘못됬다고 인지하게 된 이유는 단순히 문제를 못 맞혀서이다. 그러면 왜 문제를 못 맞혔지??? 이전에는 우승 후기도 올리고 "야 너도 할 수 있어!"를 외치면서 잘 맞추지 않았었나?? 이번 주부터는 금요일마다 진행하는 골든벨 문제 출제 방식이 바뀌었다. 이전에는..

220623 TIL 문제는 작을 때 해결하자 [내부링크]

지금 6일째 마카오 뱅크 강의를 듣고 인출하고 있는데 아직도 인출을 하지 못하고 있다. 그렇다고 지금까지 공부를 게을리 한건 아니다. 오히려 한 주 한 주 거듭될수록 공부시간은 늘고 있다. 그런데도 나의 학습 성취도는 한주 한주 갈수록 떨어지는 느낌을 받는다. 공부를 하면서 뭔가 해냈다는 느낌을 받지를 못하니까 의욕이 점점 떨어지는 느낌도 있다. 그리고 아직까지도 코드를 이해하기보다는 외운다는 느낌이 강해서 내가 마카오 뱅크가 아닌 다른 프로그램을 만들 때 이 코드들을 활용할 수 있을까?라는 불안감도 느낀다. 또 학습 방법에 대한 고민도 하게 됬다. 짝프를 하면서 평소에 많이 쓰던 메서드들의 개념을 정확히 인지하지 못하고 있음을 깨달았고, 그냥 수박 겉핥기식으로 아주 얕게 알고 있는 느낌을 받았다.. 강..

220622 TIL 자신감은 노력에서 나온다 [내부링크]

몸이 따라주지 않던 하루 오늘은 알람과 싸우면서 하루를 시작했다. 나는 알람을 맞출 때 일어나야 할 시간 15분 전부터 5분 간격으로 알람을 맞춰 놓고 5분만.. 5분만.. 하면서 하루의 시작부터 고통스럽게 시작하는 편이다.. 알람 한번 듣고 일어나는 사람이 제일 존경스럽다.. 진심.. 평소에는 9시에 학습이 시작되기 때문에 8시 정도에 일어나서 씻고 밥 먹고 하면서 여유롭게 준비하고 학습을 시작했는데, 오늘은 6시에 일어나려고 마음먹고 알람을 6시에 맞춰놨다. 이게 오늘 하루 동안 피곤했던 요인이라고 생각한다. 6시에 일어나려고 했던 이유는 어제 내 의지와 상관없이 새벽 1시쯤 잠들었다가 정신 차리고 보니 6시였다... 깜짝 놀라서 정신 차리고 일어난 김에 그때부터 공부를 했는데 생각보다 평소보다 집중..

220621 TIL 멤버변수, 지역변수, 클래스변수... 너네 뭔데?? [내부링크]

너무 헷갈리는 변수의 종류들 오늘은 평소에 아무렇지 않게 쓰던 변수의 종류들이 낯설게 느껴졌다. 전역 변수, 지역변수, 멤버 변수, 클래스 변수, 인스턴스 변수.... 변수의 종류가 왜 이렇게 많아..? 멤버 변수랑 클래스 변수랑 같은 거 아니야?? 그래서 오늘 시간을 내서 변수의 종류에 대해서 알아보기로 마음먹었다. 우선 변수의 종류를 결정짓는데 가장 중요한 요소는 "변수의 선언 위치"다. 그래서 변수가 어디서 선언했는지를 확인해야 이 변수가 어떤 종류인지 알 수 있다. 그래서 변수의 선언 위치를 기준으로 보면 변수를 2가지로 나눌 수 있다. 1. 멤버 변수 2. 지역변수 멤버 변수의 선언 위치는 "클래스 영역"이고, 지역변수의 선언 위치는 "클래스 영역 이외의 영역" 즉 메서드 안이나, 생성자 안에서..

220620 도대체 TIL을 왜 쓰는거야? [내부링크]

지금까지 TIL을 위한 TIL을 쓴게 아닌가? 지금까지 TIL을 7번 정도 github사이트에 올렸는데 TIL을 쓰는 게 아직까지 너무 힘들고 부담이 된다. 워낙 글 쓰는 거를 싫어했기 때문에 글을 많이 써보지 않았고, 그래서 내가 느끼는 감정들을 글로 표현하는 게 쉽지가 않다. 지금도 이 두 문장을 쓰는데 20분이 걸렸다. (이게 맞아!????) 남들한테는 두 문장 쓰는데 20분이나 걸린다는 게 말이 안 된다고 생각될 수 있다. 사실 어떻게 써야 하지? 하는 생각만 20분 동안 하고 있었다. 그만큼 나는 글 쓰는 거를 못하고 싫어한다. 그래서 TIL을 어떻게 써야 하는지도 모르겠고, 왜 써야 하는지도 명확지 않다. 나는 하루 중 TIL 쓰는 시간이 제일 힘들고, 시간이 제일 많이 간다. 그래서 지금도 ..

메가테라 골든벨 3회차 우승 후기 [내부링크]

메가 골든벨 저번 2회차에 이은 늦어도 아주 늦은 3회차 우승 후기를 작성하려 한다. 이번 퀴즈 학습방법도 2회차때 공부했던 방법과 마찬가지로 인출 중심의 학습으로 진행했다. 눈으로 그냥 퀴즈 문제들을 보는것이 아닌 내가 진짜로 알고 있는지 빈 종이에 답을 하나씩 써보는 인출 학습을 했다. 더 정확한 학습 방법은 2회차 우승 후기 때 썼으니 생략.. https://seungjjun.tistory.com/18 메가테라 골든벨 2회차 우승 후기 (feat. 랜덤박스 언박싱) 메가 골든벨 매주 금요일 13시부터 진행되는 "메가 골든벨"시간이 있다. 학생 때처럼 시험 보는 느낌이라서 부담 아닌 부담을 느끼는 시간이다 메가 골든벨은 주말 동안 들은 강의에서 나오는 개 seungjjun.tistory.com 나는 ..

메가테라 6주차 회고 [내부링크]

6주차 회고 메가테라 6주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 모르는데 왜 질문을 하지 않지? 나는 질문을 많이 하는가..? 아니다.. 나는 어려서부터 궁금한 게 있어도 질문을 잘하지 않았다. 어려서부터 질문을 잘 하지 않았던 이유를 지금 생각해보면 여러 가지가 있다. 우선 내가 하는 질문이 가치(?)가 없다? 적절한 질문인가? 라는 생각, 남들 다 아는 내용을 나만 모르고 있는 게 아닌가?라는 생각, 내가 궁금한 걸 질문으로 물어보기가 어려워서 등등 이러한 이유들 때문에 성인이 된 지금까지 질문을 어려워한다. 질문한다는 건 내가 모르는 거, 즉 나의 부족함을 남들에게 드러내야 한다는 뜻인데 남에게 나의 부족함을 드러내기란 쉽지가 않다. 사실 지금까지 메가테라 과정을 진행하면서도 트레이..

메가테라 5주차 회고 [내부링크]

5주차 회고 메가테라 5주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 이해와 암기는 친구 이번 주는 "transaction"이라는 단어가 나를 괴롭혔다. 영어단어에 괴로움을 느낀 적은 오랜만이다. transaction에게 고통을 받은 이유는 Makao Bank라는 프로그램을 만들 때 transaction이 너무 많이 사용되어서 엄청나게 헷갈렸다. 이 사진은 Makao Bank 프로그램의 일부 코드인데 이 사진에서만 봐도 transaction이 눈에 띄게 많다. 실제 코드에서 사용되는 transaction은 셀 수 없이 많다. 그래서 이 transaction과 저 transaction 그리고 복수형 transaction"s", 결과값 transactionResult 등등 transaction을..

메가테라 골든벨 2회차 우승 후기 (feat. 랜덤박스 언박싱) [내부링크]

메가 골든벨 매주 금요일 13시부터 진행되는 "메가 골든벨"시간이 있다. 학생 때처럼 시험 보는 느낌이라서 부담 아닌 부담을 느끼는 시간이다 메가 골든벨은 주말 동안 들은 강의에서 나오는 개념들을 퀴즈 형식으로 문제를 맞히는 시간이다. 2회 차부터는 저번 주에 나왔던 문제들도 같이 누적되면서 출제되기 때문에 골든벨 횟수가 진행될수록 학습할 양은 많아진다. 아쉽게도 1회차 우승은 놓쳤지만 자극을 받아서 2, 3회 차 우승을 차지하게 됐다. 나의 골든벨 학습 방법 일단 문제를 보고 빨리 생각해내서 맞춰야 하기 때문에 문제에 익숙해지는 게 첫 번째라고 생각했다. 우선은 무식하게 문제를 많이 봤다. 스스로 외웠다고 생각했을 때쯤 스스로 시험을 봤다. 노션에 문제들을 그대로 복사해서 빈칸에 답을 쓰는 식으로 문제..

메가테라 4주차 회고 [내부링크]

4주차 회고 메가테라 4주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 코딩 도장 월~목 9시부터 1시간 정도 코딩 테스트를 한다. 3주 차까지는 코딩 테스트 문제를 어찌저찌 1시간 안에 풀었었는데 4주차 와서는 시간 안에 풀지 못하는 경우가 더 많았다. 특히 4주 차의 월요일 첫 코딩 테스트 문제였던 "셀프넘버"는 나의 발목을 3일이나 잡았다. 셀프넘버 문제를 처음 봤을 때 문제 설명을 읽는데도 무슨 말인지 이해가 되지 않았다. 문제를 이해하는데만 10분이 걸렸다. 심지어 완벽히 이해하지 못해서 노트에 "이 경우에는 셀프넘버고 이 경우에는 셀프넘버가 아님" 이런 식으로 옆에다 적어놓고 문제를 풀었다. 결국 1시간 안에 풀지 못하고 찝찝한 상태로 정규 시간을 보내야 했다. 성격이 뭔가 해결하지 ..

메가테라 3주차 회고 [내부링크]

3주차 회고 메가테라 3주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 별과의 전쟁 이번 주 주간 과제의 문제들은 별들과의 전쟁이었다. 입력받은 수 만큼 별문자("*")를 이용해서 삼각형과 마름모를 출력하는 문제가 주간과제에 있었다. 삼각형 문제를 처음 마주했을 때는 "반복문을 통해 별을 일정 수 만큼 늘려서 출력하면 되겠다" 생각하고 접근을 했지만, 생각대로 되지 않았다. 별만 출력하면 삼각형 모양이 자동으로 나올 줄 알았지만 공백도 내가 출력해줘야 삼각형 모양이 나오는 걸 뒤늦게 깨달았다. 공백은 줄어들고 별은 늘어나는 패턴을 발견하니 문제를 풀 수 있었다. 삼각형 문제를 풀고 마름모 문제를 봤을때는 "삼각형을 출력하고 나서 삼각형 출력한 것을 반대로 역삼각형으로 출력하면 되겠다"라는 생각으..

CSS [내부링크]

CSS(Cascading Style Sheets) css는 웹페이지를 꾸미려고 작성하는 코드이다. css도 html과 마찬가지로 프로그래밍 언어가 아니다 css는 style sheet 언어인데, HTML 문서에 있는 요소들에 선택적으로 스타일을 적용할 수 있다. css selector css 선택자 : 선택을 해주는 요소이다. 특정 요소를 선택하여 스타일을 적용할 수 있다. p { font-size: 1em; color:blue; } 여기서 p가 선택자이다. selector(선택자)의 종류 1. 전체 선택자 * { box-sizing: boder-box; // 모든 영역에 box-sizing을 boder-box로 적용 } * (전체 선택자)는 모든 요소에 같은 css를 적용한다. 그렇기 때문에 페이지의..

HTML [내부링크]

HTML HTML(Hyper Text Markup Language)은 웹페이지를 만들기 위한 언어로 웹브라우저 위에서 동작하는 언어다. HT + ML Hyper-text → 초월적인 텍스트 (우리가 웹브라우저에서 보는 것들) Markup Language → 글씨를 꾸며주는 것( 글씨에 보조적인 것을 붙여 표현을 해준다) DOCTYPE DOCTYPE(document type = 문서의 타입)은 선언된 페이지의 HTML 버전이 무엇인지를 웹 브라우저에 알려주는 역할을 하는 선언문이다. DOCTYPE 선언은 HTML 문서에서 태그를 정의하기 전에 가장 먼저 선언되어야만 합니다. Tag tag는 콘텐츠를 감싸서 그 정보의 성격과 의미를 정의한다. 시작이 있으면 끝이 있어야 한다. -> 열었으면 닫아야 한..

배열 [내부링크]

배열 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 "배열"이라고 한다. 여러 값을 index로 접근해서 관리할 수 있다. (index는 0부터 시작한다. 범위는 0부터 배열의 길이 -1까지이다) 배열 선언 타입[] 변수이름; -> int[] score; 타입 변수이름[]; -> int score[]; 배열 생성 배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이고, 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다. 타입[] 변수이름; // 배열을 선언 변수이름 = new 타입[길이]; // 배열을 생성 // 배열 선언과 생성을 동시에 int[] score = new int[5]; // 길이가 5인 int배열 배열의 인덱스를 활용해..

반복문 - for문 [내부링크]

For문 코드를 작성하다 보면 중복이 되는 코드들이 있다. 중복되는 코드들을 반복문을 이용하여 간단하게 표현할 수 있다. 반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용된다. 반복의 3요소에는 초기값 지정; 반복 조건; 상태 변경(반복할 때마다 실행될 것))이 있다. for문의 기본 구조 for(초기값 지정; 조건 상태; 상태 변경) { // 조건식이 참(true)인 동안 수행될 문장 } 제일 먼저 초기화가 수행된다 -> 초기값 지정 조건식이 참인 동안 수행될 문장이 실행된다. -> 조건 상태 확인 후 블럭 안 구문 실행 문장이 실행되고 증감식이 진행된다. -> 상태 변경 조건식이 거짓이 되면 for문을 빠져나간다. -> 조건 상태 확인 후 false면 for문 종료 for문 사용 예 for(..

메가테라 2주차 회고 [내부링크]

2주차 회고 메가테라 2주 차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 반복 수련 1주차를 무사히(?) 마치고 본격적으로 코딩을 시작하는 주인 2주 차를 맞이했다. 1주차를 진행할 때 코딩을 하지 않고 컴퓨터에 대한 조사만 했기 때문에 코딩을 빨리 해보고 싶다는 생각을 자주 했었다. 그럴 때마다 트레이너님들은 어차피 다음 주부터 "코딩만 한다", "코딩 지옥이다" 이런 식으로 말씀을 하셨었는데 그 당시는 깨닫지 못했지만 2주 차를 마무리하는 지금은 어느 정도 무슨 말인지 이해가 간다.. 2주차를 시작할 때 코딩을 한다는 설레는 마음으로 월요일을 맞이했다. 코딩 도장이라는 코딩 테스트 문제도 풀었고, 주말에 들은 강의 내용을 바탕으로 팀원들과 토론도 했다. 그리고 주간 과제로 총 10단계의 문제들..

조건문 [내부링크]

Boolean boolean 자료형은 참 또는 거짓(true/false)의 값을 갖는다. boolean 연산은 조건문의 판단 기준으로 많이 사용한다. System.out.println(1 < 3); -> true System.out.println(1 > 3); -> false Single equal(=) - assign assign → single equal (=) ⇒ 변수에 값을 지정 / 값에 이름을 붙여줌. x = 1; x라는 변수에 1을 할당했다고 표현이 된다. boolean result = 1 = 1; System.out.println(result); -> 1 error result에다 1을 할당해주고 또 1을 할당해준다는 의미는 말이 안되기 때문에 에러가 발생 Double equal(==) - ..

입출력 [내부링크]

Scanner Java에서 입력을 받으려면 Scanner라는 도구(객체)를 이용해야 한다. 그런데 아무것도 없는 상태에서는 Scanner라는 개념이 없기 때문에 import를 해줘야 한다. import란? 더보기 다른 패키지안에 있는 클래스/메소드/변수를 사용하고자 할 때 사용하는 키워드이다. import java.util Scanner; java에서 기본으로 만들어 놓은 것이다. Scanner 객체 생성 Scanner 이름 = new Scanner(System.in) Scanner는 어딘가(키보드)에서 값을 가져오는 도구이다. System.in (입력) System.in은 사용자로부터 입력을 받기 위함 new는 "create"와 같은 의미 String name = 이름.nextLine(); scanne..

변수와 타입 [내부링크]

관심사의 분리 프로그램을 만들 때 관심사의 분리를 한다 관심사의 분리란 어떤 프로그램을 만들 때 각각의 부분들로 쪼갠 후 결합해서 하나의 프로그램을 만드는 것을 의미한다. 관심사의 분리의 여러가지 방법중 변수를 배워보자. 변수 변수(Variable)란 이름을 할당 받아 데이터를 저장할 수 있는 메모리의 공간을 의미한다. 변수의 선언방법 int(데이터 타입) age(변수이름); 데이터 타입의 종류 byte → 8 bits (1 byte) 정수형 short → 16 bits (2 bytes) 정수형 ⇒ 2^16 int → 32 bits (4 bytes) 정수형 Integer (정수) long → 64 bits (8 bytes) 정수형 float → 32 bits 부동소수점 (소수점의 위치가 왔다갔다 한다. ..

Hello, World [내부링크]

프로젝트 생성하기 Intellj idea 프로그램을 이용해서 java 프로그래밍을 한다. Hello라는 이름의 프로젝트를 생성한다. src폴더에 Hello라는 java파일을 생성한다. Java 프로그램을 만든다 = Java 소스 코드를 작성한다 라는 의미이다. 여기서 소스 코드(원시 코드)란 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일이다.(java 파일 (텍스트 파일)) 코드 public class Hello { public static void main(String[] args) { System.out.println(”Hello, world”); } } 코드 의미 public → 공개된 static → 정적인 void → 반환값이 없는 main → 메인 String →..

메가테라 1주차 주간회고 [내부링크]

1주차 주간회고 메가테라 1주차를 진행하면서 있었던 일을 종합해서 회고하였습니다. 논리를 만들어라 메가테라 과정을 시작한 지 일주일이 지났다. 시작하기 일주일 전부터 기다리던 과정이었기 때문에 1주차에는 본격적으로 코딩을 하기 전 먼저 컴퓨터를 이해하기 위한 공부를 했다. 사실 이때까지 개발자가 프로그래밍을 하는 데 있어서 코딩만 잘하면 되지 라는 생각이 있었는데 정말 잘못된 생각이었다. 개발자가 프로그래밍을 하는 데 사용하는 도구가 컴퓨터인데 자기가 사용하는 도구에 대해서 알지도 못한다는 생각을 해보니 정말 어리석은 생각이었다. 메가테라의 첫 과제는 컴퓨터에 대해 전반적으로 이해하고 정해진 예산으로 자신의 목적에 맞는 최적의 pc견적을 맞추는 것이었다. 처음 과제를 보고 들었던 생각은 "내가 pc의 견..

M1칩의 성능이 압도적인 이유 [내부링크]

M1이란? M1은 ARM기반의 SoC(System on Chip)으로 하나의 칩 안에 CPU, GPU, RAM, Neural Engine등 여러 구성요소를 포함하고 있는 칩입니다. (SoC는 이번에 새로 개발된 기술이 아니고 우리가 사용하는 스마트폰들은 이미 SoC로 구동되고있다. 근데 애플은 이 기술을 노트북에 구현을 한 점에서 대단하다고 느껴진다) ARM 아키텍처는 Advaced RISC Machine의 약자로 임베디드 기기에 많이 사용되는 RISC 프로세스이다. 더보기 RISC(Reduced Instruction Set Computer)란 CPU 명령어의 개수를 줄여 명령어 해석시간을 줄임으로서 명령어 실행속도를 빠르게 한 방식 CPU : 4개의 고성능 코어(Firestorm) 4개의 고효율 코어(..

컴퓨터의 이해 [내부링크]

아날로그와 디지털 아날로그(analog)란 데이터를 연속적으로 변화해 가는 물리량을 나타낸 것을 말한다. 디지털(digital)은 연속적인 양을 단계적으로 잘라 숫자로 나타낸 것을 말한다. 주변 아날로그 예시 주변 디지털 예시 아날로그와 디지털의 차이점 디지털은 이산적(단속적),아날로그는 연속적이라는 차이점이 있다. 컴퓨터의 역사 1. 최초의 계산 장치 : 주판 계산을 하는 도구로 역사가 오래된 것은 주판이다. 기원전 26세기경 중국에서 시작되었다고 한다. 2.파스칼의 계산기 1642년 파스칼이 톱니바퀴를 이용하여 덧셈과 뺄셈을 했다. 파스칼의 계산기는 전자식은 아니지만 세계 최초의 기계식 계산기라고 한다. 3.라이프니츠의 계산기 1671년 파스칼의 계산기를 개량하여 곱셈과 나눗셈도 가능한 계산기를 발명..

Git과 GitHub 이해하고 사용하기 [내부링크]

Git과 GitHub란? Git 로컬에서 관리되는 버전 관리 시스템(VCS: Version Control System) git은 자신의 코드를 관리할 수 있도록 하는 버전 관리 시스템이다. git은 클라우드가 아닌 자신의 로컬에서 관리하기 때문에 인터넷이 필요하지 않은 장점이 있다. GitHub 클라우드 방식으로 관리되는 버전 관리 시스템 github를 통해 다른 사람들과 코드 공유가 가능해 협업이 가능하다. Git을 사용해야 하는 이유? 그렇다면 git을 사용해야 하는 이유는 무엇일까? 1. 개발하다 보면 프로그램의 버전을 관리를 해야 하는데 그때 git이 버전을 관리하는데 유용하다. 특정 시점의 버전의 기능을 다시 가져오거나, 복원해야 하는 상황이 발생할 수 있기 때문이다. 2. 협업에 효과적이다. ..

개발자가 되고 싶은 이유 [내부링크]

나는 '왜' 개발자가 되고 싶은가? 이 글을 작성하면서 개발자가 되고 싶은 이유에 대해 돌아보고 누군가가 '왜' 개발자가 되고 싶은지 물어본다면 이 글을 보여줄 것이다. 0. Intro 비전공자인 내가 왜 개발자라는 꿈을 갖게 되었는지 설명하기 전에, 먼저 나에 대해서 설명해보려 한다. 20살의 나는 꿈도 없고, 목표도 없는 미련한 대학생이었다. 남들 하는 대로 적당히 공부하고, 큰 고민 없이 성적 맞춰서 전문대에 입학했다. 1학년 때는 대학에서 알려주는 대로 적당히 공부하고 졸업해서 취업하는 미래를 그렸다. 하지만 1학년이 끝날 무렵 배우고 있는 전공에 대해 흥미를 느끼지 못하고 있었고, 서울에서 학교 다니는 친구들을 보고 나도 서울에서 대학생활을 하고 싶다는 생각을 하게 되었다. 그래서 무작정 서울에..