티스토리 뷰

 

미니프로젝트

첫째주가 시작과 함께 미니 프로젝트가 시작됐다.

팀장을 맡게 되었는데, 처음에는 너무 부담스러웠지만 팀원들이 적극적으로 소통하여 오히려 좋았다.

미니 프로젝트로는 '도기도기'라는 강아지 자랑 웹사이트를 만들었는데,

기획자로 일하면서 얻은 노하우로 화면설계를 빠르게 정리하고, 공부했던 지식으로 DB설계까지 잘 끝내고 칭찬까지 받으니 기분이 좋았다.

역할 분배는 기능 별로 가져가기로 했다.

로그인&회원가입, 메인(조회)&검색, 작성&수정&삭제, 좋아요로 각각 분배했고, 나는 로그인&회원가입을 맡았다.

이제와서 생각해보면 작성&수정&삭제에 너무 많은 기능이 몰려 있었던 게 아닌가 싶다.

어쨌거나 로그인&회원가입 기능 구현이 빨리 끝나서 다른 조원들의 디버깅이나 기능 구현을 도왔는데, 그러다보니 어색했던 조원들과도 차츰 친해졌다. 동료를 얻은 느낌이 들어 좋았다.

 

#JWT

이번 주차에 새롭게 알게 된 것은 JWT라는 로그인 인증방식이었는데, 서버에서 회원임이 확인되면 JSON으로 된 토큰을 발급해 클라이언트에 보내고, 다른 요청이 발생할 때 그 토큰을 다시 서버에 보내 디코딩하여 로그인 상태가 맞는지 확인하는 것이었다.

세션/쿠키 인증 방식만 알던 나에게는 새로운 지식이었다.

 

JWT

JWT(JSON Web Token) : JSON 객체를 이용해 인증에 필요한 정보를 암호화시킨 토큰으로 인증하는 방식이다 토큰은 세 가지로 구성돼 있다. Header: Header, Payload, Verify Signature 를 암호화할 방식(alg), 타..

bibapditura.tistory.com

 

#jinja2

또, flask의 랜더링 방식인 jinja2를 이용해서 서버 사이드 랜더링을 구현했는데, 예전에 회사에서 한 번 앵귤러를 통해서 게시판을 만들던 생각이 나면서 그땐 참 혼란스러웠는데, 그래도 한 번 해봤다고, 그때보다 이해도가 훨씬 높아진 것을 알 수 있었다.

역시 뭐든 직접 해봐야 실력이 느나 보다.

 

jinja2로 검색 구현하기

Flask의 서버 사이드 랜더링 템플릿인 jinja2는 ajax로 서버와 통신할 필요를 줄여준다. 페이지가 로딩될 때 동적으로 필요한 데이터를 받아와서 뿌려주기 때문에 페이지 로딩 시 ajax로 서버를 호출

bibapditura.tistory.com

 

#몽고db

이 프로젝트를 하면서, 사전 강의 때 익혔던 몽고db를 또 쓰게 되었는데, 몽고db는 알다가도 모르겠다.

역시 각 잡고 공부해야 알 수 있을 것 같지만, 아마도 나는 관계형DB를 쓸 것 같아서 친해질 날이 올지는 모르겠다.

어쨌든 없는 값을 확인하려면 list로 반환값을 감싸주어야 했다.

 

몽고DB 없는 값 확인

검색결과가 없을 때, 없다는 메시지를 띄워주려고 아래와 같이 코드를 짰다. 그런데 아무리 해도 안 되서, 서버에서 검사를 해주려고 했다. {% if board == '' %} 검색 결과가 없습니다. {% else %} {% for d

bibapditura.tistory.com

 

#git

프로젝트 마지막날, git 때문에 프로젝트를 날려 먹을 뻔 했다.

git push 가 안 되어서 강제 push를 했는데, 이상하게 병합이 되면서 이전 버전, 최신 버전이 섞인 것이다.

불안하고 초조하고, 팀원들에게 많이 미안했다.

다음부터는 강제 push를 하지 말고, 현재 있는 위치를 변경하여 최신 상태로 만든 후 push를 해야겠다.

아직도 git에 대해서 알고 싶은 것은 많이 있는데, 틈틈이 사용할 때마다 정리해 두려고 한다.

 

git 관련 명령어 & 팁

깃 수업에서는 소스트리를 이용해서 깃의 개념에 대해 가르친다. 그렇지만 나는 현업에서 명령어로 주로 사용한다고 알고 있기 때문에 명령어로 익히고자 한다. 개념은 강의로, 명령어는 블로

bibapditura.tistory.com

 

git 브랜치 변경하기

깃의 메인 브랜치명이 master에서 main으로 바뀌었다고 한다. 이때문에 원격 리포지터리의 브랜치명을 main으로 변경했는데, 터미널에서 푸쉬를 하려니 오류가 발생했다. main 브랜치를 찾을 수 없다

bibapditura.tistory.com

 

#서버 세팅

그리고, 대망의 EC2에 올릴 시간.

구현이 늦어진 기능이 있어서 여유가 있을 거라고 생각하고 기다리다가, 큰 오산이었음을 깨달았다.

우리는 서버 환경과 로컬 환경이 달라 로그인이 안 되는 참사를 겪었다.

30분을 남겨 두고 서버에 올리는 일은 절대 없어야 한다는 교훈을 얻었다.

 

서버 환경 문제 대응

프로젝트를 다 만들고 나서 서버에 올렸더니 아래와 같은 에러가 발생했다. 정말 딱 로그인만 안 되는 것이다. 제출 기한은 다가오는데, 핵심 기능이 안 되니 정말 미칠 노릇이었다. file "/usr/lib/p

bibapditura.tistory.com

 

코딩테스트

미니프로젝트가 끝나고, 살짝 해이한 밤을 보내고서 맞은 아침은 다시 긴장으로 가득찼다.

갑자기 자바로, 알고리즘 문제를 풀게 된 것이다.

난이도 '하'의 문제도 못 풀고 좌절한 나는 많이 쪼그라 들었다.

새로 배정받은 팀은 잘 하는 분이 두 분이나 계셔서, 도움을 많이 받을 수 있지만, 그래도 쫄린다.

 

#단항연산자

프로그래머스의 강의를 들으면서 문제를 풀려고 했는데, 문제 풀기에 치여서 허덕이다가, 역시 개념을 알아야겠다는 생각이 들어서 '자바의 정석'을 샀다. 당일날 바로 배송이 되어서, 빠르게 시작할 수 있었다.

프로그래머스 강의는 듣다 말았지만, 그래도 단항연산자의 우선순위는 외워두자.

 

자바 - 단항연산자

연산자 우선순위 최우선연산자 ( ., [], () ) 단항연산자 ( ++,--,!,~,+/- : 부정, bit변환>부호>증감) 산술연산자 ( *,/,%,+,-,shift) < 시프트연산자 ( >>,<<,>>> ) > 비교연산자 ( >,<,>=,<=,==,!= ) 비트연..

bibapditura.tistory.com

 

 

자바 - 단항연산자

연산자 우선순위 최우선연산자 ( ., [], () ) 단항연산자 ( ++,--,!,~,+/- : 부정, bit변환>부호>증감) 산술연산자 ( *,/,%,+,-,shift) < 시프트연산자 ( >>,<<,>>> ) > 비교연산자 ( >,<,>=,<=,==,!= ) 비트연..

bibapditura.tistory.com

 

#문자열

자바는 나에게는 굉장히 strict한 이미지였는데, for문에서 중괄호를 안 써도 되는 등 뭔가 자유로운 분위기도 느껴졌다.

어쨌거나 문자열과 관련된 문제를 풀면서, String은 클래스라는 사실을 알게 되었다. 그래서 length() 메서드가 정의되어 있고, 문자열.length()를 사용할 수 있었다. 기본형은 char 뿐이었다. char는 한 글자만 저장되는 타입이고, String은 char의 확장 버전이라고 한다.

 

 

가운데 글자 가져오기

스트링도 .length()로 길이를 구할 수 있다. 스트링은 사실은 기본형이 아닌 참조형이다. 아래의 코드에서 나는 특정 위치의 값을 가져오기 위해 charAt을 썼고, 문자열로 변환하기 위해 + ""을 해주

bibapditura.tistory.com

 

#배열

그리고는 고난의 시간이었다. 배열은 나를 정말 고통스럽게 만들었다.

배열을 생각해내지 못하거나, 못 써먹거나였다.

배열은 크기를 변경하는 것이 불가능하다. 또한 초기화할 때 크기를 지정해주는데, 그 시작 주소를 저장하기 때문에 그런 것 같다. 배열은 연속된 인덱스를 가지고 있어, 크기를 알아야 어디가 끝인지 알 수 있기 때문이라고 추측해본다.

하지만 다차원 배열의 경우, 예를 들어 2차원 배열이라면 두 번째 배열은 크기를 정하지 않고 별도로 배열별로 정할 수 있는데, 배열의 참조변수가 첫 번째 배열의 시작주소를 저장하기 때문에 나중에 생성되도 되는 것 같다.

 

[코딩테스트] a월 b일 요일 구하기

하...누가 이렇게 무식하게 풀으랬어 하지만 switch문은 효율이 좋은 모양이다. 0.01ms 정도의 속도가 났다. public class exam13calendar { // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요.

bibapditura.tistory.com

 

[코딩테스트] 배열 정렬

정렬...먼 산이다. 하나씩..정리해보자... 이번에는 정말, 오타에서부터 시작해서, 배열에 잘못된 인덱스를 넣어 값이 이상한 데 저장되는 등 삽질을 크게 했다. 덕분에 두시간은 날려 먹은 것 같

bibapditura.tistory.com

 

[코딩테스트] 행렬 더하기

두 개의 같은 사이즈의 행렬을 더하는 문제이다. 다차원 배열!! 거의 3시간 동안 나를 괴롭혔다. 다른 문제는 그래도 한 시간 이내로 풀었는데...ㅜ 나는 배열은 초기화할 때 크기가 반드시 지정

bibapditura.tistory.com

 

#자바의 정석

나를 고통스럽게 했던 많은 문제들은, 핵심 로직은 자바의 정석에 대부분 나와 있었다.

이걸 오늘에서야 알다니 통탄할 노릇이지만, 그래도 스스로 생각해냈다는 데에 의의를 두자.

 

[코딩테스트] x씩 증가하는 숫자를 n개 지니는 리스트

public class exam11gap { // 함수 solution은 정수 x와 자연수 n을 입력 받아, // x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. // 다음 제한 조건을 보고, 조건을 만족하는 함수,

bibapditura.tistory.com

 

[코딩테스트] 전화번호 마스킹 처리하기

생각보다 쉽게 문제가 풀렸다! 복잡하게 생각하다가, 코드를 짜기 전에 어떻게 할 것인지 한 줄 한 줄 풀어 쓰니 정리가 되어 좋았다. 거기다가 풀면서 더 단순하게 생각하게 되기도 해서, 수정

bibapditura.tistory.com

 

[코딩테스트] n배씩 증가하는 가격 계산

문제가 길어서 쫄았던 문제. 하지만 풀이는 생각보다 단순했다. 처음으로 삼항연산자를 써봤다! public class exam12enoughMoney { // 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. // 이

bibapditura.tistory.com

 

[코딩테스트] x씩 증가하는 숫자를 n개 지니는 리스트

public class exam11gap { // 함수 solution은 정수 x와 자연수 n을 입력 받아, // x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. // 다음 제한 조건을 보고, 조건을 만족하는 함수,

bibapditura.tistory.com

 

[코딩테스트] 전화번호 마스킹 처리하기

생각보다 쉽게 문제가 풀렸다! 복잡하게 생각하다가, 코드를 짜기 전에 어떻게 할 것인지 한 줄 한 줄 풀어 쓰니 정리가 되어 좋았다. 거기다가 풀면서 더 단순하게 생각하게 되기도 해서, 수정

bibapditura.tistory.com

 

[코딩테스트] 평균 구하기

평균을 구하는 문제인데, 배열이라는 부분이 조금 다른 것 같다. 단순하게 다 더해주고 배열 길이로 나눠줬다. public class exam08avg { //정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution

bibapditura.tistory.com

 

[코딩테스트] 음양 더하기

같은 조의 팀장님의 방식을 따라하기로 했다. 생각하는 로직을 차례대로 풀어서 작성하는 것이다. 하면서 중간 중간에 로직이 수정되면 같이 수정해줬다. public class exam07absolute { // 어떤 정수들

bibapditura.tistory.com

 

두 정수 사이의 합 구하기

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 값이 같으면 하나를 반환하

bibapditura.tistory.com

 

#자바의 정석2

일요일 오전부터 자바의 정석을 읽었다.

개인사적으로는 친구가 함께 살기로 한 대망의 날이라서, 같이 짐 정리를 좀 했다.

그리고 다시 자바의 정석을 읽어야 한다.

자바의 정석을 읽으니 머리 속이 정리되는 기분인데, 쪽수의 압박이 만만치가 않다.

기본 개념을 알려면 객체지향 파트까지는 다 읽어야 할 것 같은데, 그러려면 앞으로 두 시간은 꼼짝없이 읽어야 할테다.

https://bibapditura.tistory.com/30

 

[Java] 배열

배열이란 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 배열의 참조변수는 주소값을 저장하며, 실제 값을 저장하는 것은 아니다. 배열의 선언 및 생성은: 타입[] 변수이름 = new 타입[길이]

bibapditura.tistory.com

https://bibapditura.tistory.com/31

 

[Java] String 배열 / Char 배열

String의 정체 String은 사실 클래스이다. 따라서 초기화 시, 참조형 변수의 기본값인 null로 초기화된다. char 배열에 여러 가지 메서드를 추가하여 확장한 것이다. String 클래스 vs char 배열 String 객체

bibapditura.tistory.com

https://bibapditura.tistory.com/32

 

[Java] 다차원 배열

2차원 배열 2차원 배열의 선언 방법은 1차원 배열과 같지만 []를 한 번 더 써주면 된다: int[][] score 주로 테이블 형식의 데이터를 담는 데 사용한다. 초기화 시, 배열요소의 타입의 기본값으로 초기

bibapditura.tistory.com

https://bibapditura.tistory.com/33

 

[Java] 객체지향

기본 개념 실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다. 실제 사물의 속성과 기능을 데이터(변수)와 함수로 정의한 것 특징 코드의 재사용성이

bibapditura.tistory.com

https://bibapditura.tistory.com/34

 

[Java] 변수와 메서드

변수의 종류 지역변수: 멤버변수를 제외한 나머지 변수 - 메서드, 생성자, 초기화 블럭 내의 변수 클래스변수: 멤버변수 중 static이 붙은 것 - 클래스 영역의 변수 인스턴스마다 독립적인 저장공

bibapditura.tistory.com

https://bibapditura.tistory.com/35

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함