전체 글 468

[Git] git branch & commit convention 정리

유용하게 쓸 수 있는 깃 컨벤션을 정리해놓았다. 우리 팀에서 쓰던 건데 팀원분께서 친절히 정리해서 올려주셨다. 기왕이면 지켜서 쓰자. 🧬 Git Branch Convention 형태 : 이름/기능이름_날짜 1️⃣ 각 단어 전부 소문자 - E.g. nickname/signin 2️⃣ 한 기능을 자주 수정해야 할 때 날짜 붙이기(날짜 양식 : YYMMDD) - E.g. nickname/signin_211125 📝 Git Commit Convention 형태 : 커밋타입: 커밋 메시지 - E.g. Add: 카카오 로그인 구현 커밋 타입 리스트 - Add: 기능 추가 - Fix: 코드 수정 ❗️ 잘못된 코드 수정 - Delete: 기능 삭제 - Refactor: 코드 리팩토링 ❗️ 잘 되어있는 코드 수정 - T..

인프라/Git 2022.01.12

[SpringBoot] java.nio.file.NoSuchFileException tomcat에러

흔히 발생할 수 있는 에러인데 이번엔 좀 특이한 상황에서 발생해서 기록해두게 되었다. 프로젝트를 진행하면서 게시판에 글을 작성했을때 사진도 여러장 첨부할 수 있도록 만들고 있었다. MultipartFile을 List로 묶어서 다루고 있었는데 잘 작동하는지 확인해보기 위해서 컨트롤러에 사진과 글을 전달하고 사진을 다시 프론트에서 던져주는 방식으로 작성하였다. List이 return 되는 셈이었다. 아마 사진이 찍히는게 아니라 toString() 처럼 명세라던지 아니면 path라던지 어찌되었든 뭐가됬든 뭐라도 찍히는지 확인해보고자 리턴했는데 위와 같은 java.nio.file.NoSuchFileException 에러가 발생했다. 그리고 에러 로그를 읽어보면 정말 흥미로운 내용이 있다. 에러 사유에 tomca..

[Dev] 백엔드 면접 질문 리스트

괜찮은 면접 질문 리스트가 있어서 저장해둔다! 언젠가 도움이 될 것 같다.  출처: https://oolaf.tistory.com/123 신입 면접보러 다면서 받았던 질문들입니다.컴포넌트와 모듈의 차이자바란 무엇인가자바의 구동원리 (컴파일 순서 같은 ?)JVM의 특징객체 지향과 절차지향의 차이점객체지향 언어의 특징(상속 추상 등등 …)상속과 구현의 차이점 과 특징 및 장단점오버라이딩 오버로딩의 차이점과 특징기본형 변수와 참조형 변수가 뭐가있나스택오버 플로우가 왜일어나나메모리 누수가 무엇인가메모리 누수를 막기위해 어떻게 해야하나static에 대해 설명해봐라싱글턴이 무엇인가 ? 디자인패턴을 아나 ?익명클래스와 익명객체를 아나?문자열을 끊어서 가져오거나 문자열 검색자료구조 (어레이 링크드 벡터 , 해쉬 맵 셋..

개발 정보 2022.01.09

[C++] C++ 에도 annotation이 존재할까?

요즘 springboot를 사용하면서 프로젝트를 진행중이라서 잔뜩 annotation을 사용중이었다. 그런데 문뜩 c++에도 annotation을 쓰는가? 에 대한 궁금증이 번졌다. 그래서 검색해보았는데 이렇다 할 annotation이라는건 없었고 그 대신에 generalized attributes 라는 기능을 쓴다고 한다. 아래 스택오버플로우의 답변들을 보면 뭘 말하는지 알 수 있다. https://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/ C++11 generalized attributes Generalized attributes are a new C++11 core language feature that is..

C & C++/C++ 2022.01.03

[SpringBoot] io.jsonwebtoken.security.WeakKeyException: The signing key's size is 80 bits which is not secure enough for the HS512 algorithm.

jwt 를 만들려고 하고 있는데 에러가 발생했다. 키 사이즈가 작다고 해서 단지 그저 키로 주어준 문자열이 너무 짧아서 이런 에러를 낸다고? 라고 생각했는데 정말 그게 맞다. 해쉬 알고리즘으로 바꿀때 키도 같이 주게 되는데 그냥 길이를 좀 늘려주면 해결된다. 단순한 에러였다. 아래 블로그에서 좀 더 상세한 내용을 살필 수 있다. https://lemontia.tistory.com/1021 [springboot, jwt] jwt 로 토큰 생성, 유효시간 관리 하기 이번에는 jwt를 이용한 로그인 인증을 만들려 한다. 일전에 @EnableAuthorizationserver deprecated 되면서 찾던 중 jwt가 있어 이걸 활용하기로 했다(DB로 토큰유효성 확인도 안해서 더 나은거 같기도 하고 lemon..

2021년 회고 - 언제나 Follow the path.

2021년이 지나고 2022년이 왔다. 이제와서 2021년을 돌아보니 스스로 많이 성장한 시기였다는 생각이 든다. 내가 이루고 싶은 목표도 이루었다. 아주 작은 목표였는데 적어도 살면서 한번쯤은 받아봐야겠다고 생각하고 있던 무엇인가였는데 정말 받았다. 그런데 사람의 성질이 정말 신기한지라 받고나니 꽤 할만했다는 생각이 들었다. 그리 어렵지 않은 목표였다는 생각도 들었다. 어째 절대적인 수치의 노력이란 존재하지 않는다는 생각이 들었다. 언제나 대상에 따라 노력은 상대적이다. 그래서 불평할 수도 없고 불평해서도 안된다는 생각이 들었다. 노력의 상대성을 불평하는 순간 현실을 있는 그대로 받아들이지 못할 거라는 생각이 들었다. 상대적인 노력이라 하더라도 스스로 열심히 했다고 돌아볼 수준은 했다고 생각되어 만족스..

생각들 2022.01.02

[SpringBoot] Error resolving template [/index]

springboot 를 통해 작업을 마치고 무사히 build까지 끝났는데 막상 구동을 하고 localhost:8080 에 들어갔더니 제목과 같은 에러가 뜨면서 갑자기 에러로그가 찍히는걸 확인할 수 있다. 정말 간단한 이유인데 만약 작성한 컨트롤러 중에서 return "/index"; 이처럼 슬래쉬 / 를 붙여서 작성해준 컨트롤러가 있다면 슬래쉬를 제거하고 return "index"; 와 같이 작성해주면 된다. (이때 index.html 이 있다고 가정하는 상황이다.) 어느 블로그를 살펴보니 슬래쉬 때문에 경로를 찾지 못해 발생하는 상황이라고 한다. 슬래쉬를 빼버리면 된다. 아래 블로그를 참조하면 여기보다 더 친절하게 설명되어있다. https://dev-jwblog.tistory.com/40 [Spring..

[SpringBoot] Springboot kakao OAuth 구현 참고 블로그

https://linkeverything.github.io/springboot/kakao-login-3/ 카카오톡 로그인 구현하기 - (3) OAuth 방식 구현하기 웹이든 앱이든 서비스를 개발하는 데 있어서 SSO(Single Sign On) 의 필요성이 계속 화두가 되는 것 같습니다. 이제 기존 시스템 이라는 것이 거의 다 있게 마련이고, 따라서 기존에 사용하던 로그인 linkeverything.github.io 위 블로그에서 많은 도움을 받았다.

더 나아가기

최근 좀 육체적으로나 정신적으로나 많이 지쳐있었던것같다. 한계를 느끼기도 했고 많은 부족함을 느끼기도 했었다. 부족함을 느꼈기에 더 채울 수 있는 부분을 확인할 수 있었고 한계를 느꼈기에 뛰어넘을 목표가 생겼다. 지금까지 해왔던 모든 일들이 다 운이 좋았다고 생각한다. 남들보다 항상 운이 좋았다. 간절히 원했던 일들도 모두 이뤄냈다. 작든 크던 해보고 싶다고 원했던 목표들은 모두 이뤄냈다. 이번 목표도 그렇게 되길 바라며 나는 99퍼센트의 노력을 해볼테니 행운은 내게 1퍼센트만 도와달라고 말해보고 싶다. 싫다면 고작 1퍼센트도 내가 채워버리겠다. 미래는 원래 두려운게 맞다. 알 수 없는것을 두려워하는 것이 인간의 본성이라 그렇다. 인간이 어둠을 무서워하는 이유는 그 속에 무엇이 있는지 알지 못하기 때문이..

생각들 2021.12.11

[Python3] Python 에서 assert 란?

assert는 조건이 참임을 보증할때 사용한다. 어떤 함수가 반드시 정수만을 받는다고 가정한다면 assert 를 통해 정수가 아닌 값이 들어왔을때 assertionError 를 내도록 만들 수 있다. 이와 같인 방식을 방어적 프로그래밍이라고 한다. 확실하게 보장한다는거다. 물론 이 구문 뿐 아니라 실제로 타입이 되었든 value가 되었든간에 무언가를 체크하고 가드하는 동작은 반드시 작성되어있어야만한다. 아래 블로그에서 도움을 받았다. 감사합니다. https://wikidocs.net/21050 03_가정 설정문(assert) assert는 뒤의 조건이 True가 아니면 AssertError를 발생한다. ``` >>> a = 3 >>> assert a == 2 #결과 Traceback (mos ... wi..

[Functional Programming ] Functional programming 계산 모델

수업 도중 교수님께서 올려주신 링크이다. 솔직히 말해서 어려워서 안읽어봤다. 나중에 읽어보면 좋을 것 같다. https://www.dmi.unict.it/barba/PROG-LANG/PROGRAMMI-TESTI/READING-MATERIAL/ShortIntroFPprog-lang.htm Functional Programming and Lambda-calculus Contents 1. Why functional programming? 2. An imperative programming style 3. A functional programming style 4. Functions in mathematics and functions as programs 5. Functional programs 6. The e..

[Flask] ReferenceError: weakly-referenced object no longer exists 의 발생이유

며칠전 포스팅했던 글에 이어서 정확한 설명을 찾았다. https://www.py4u.net/discuss/147695 위의 링크에 달린 답변들이 많은 도움이 되었다. weakly-referenced object 는 가비지 콜렉터가 제거할 대상들을 살피는 와중에서 그것이 제거되지 않을 것이라고 보장해주지 못할 경우에 놓인 객체를 말한다고 한다. 그러니 내가 쓰려고 하는 대상이 가비지 콜렉터에게 제거당할 가능성이 존재한다는 거다. 그렇기 때문에 에러가 발생한다. 나의 경우도 함수가 종료하면 당연히 local variable 들은 사라질텐데 그 점을 염두에 두지 못하고 코드를 작성한 탓에 이런 에러가 발생했던 거다. (나는 함수의 local variable에 mysql dbconnect 관련 객체를 받아서 그..

Python3/Flask 2021.11.25

[Flask] mysql.connector.errors.DatabaseError: 2014 (HY000): Commands out of sync; you can't run this command now

Flask 를 통해 개발하면서 sql을 직접 작성해줄 일이 있을텐데 이때 특정 sql문이 두개 이상 존재할때 연달아 실행되어야할 sql문들의 중간에서 commit을 치게 되면 이후의 sql문이 실행되지 않는 경우가 발생했다. 내 경우에는 아래와 같은 경우였다. sql = """update user set user_address=%s, user_job=%s where user_SSN=%s; commit;""" mysql_cursor.execute(sql, (data)) data2 = (outer_user_SSN) sql = """select * from user where user_SSN = %s;""" 위의 코드에서 첫번째 sql문에서 commit을 미리 치게 되니 아래의 sql구문을 실행할적에 mysq..

Python3/Flask 2021.11.23

[Flask] ReferenceError: weakly-referenced object no longer exists

급하게 이번주까지 완성해야할 프로젝트가 있어서 이것저것 골라보던 중에 Flask를 통해 빠르게 개발하는 것이 좋겠다고 생각했다. 주말에 테이블별로 대충 어떤 속성들이 필요하겠다고 이야기를 했고 일요일밤에 Flask를 빠르게 배우고 코드를 작성해서 지금까지 좀 고쳐나가는 중이다. (워낙 급하게 만들어서 중요한 변수들을 바깥에 그냥 던져놓고 global로 가져다 쓰는 만행을 저지르는중이다.) 대충 기본은 Flask를 통해 api들을 만들어주고 sql 을 직접 날려서 디비의 데이터를 가져오고 view에 보여주는 간단한 코드를 짜는 중이다. 그런데 재밌는 현상을 발견했다. 문제는 다음과 같았다. def get_MySQLConnection(): mydb = mysql.connector.connect( host="..

Python3/Flask 2021.11.23

[C] C언어 질문: 두 배열 a와 b에서 b = a 에서 에러가 발생하는 이유는 무엇일까?

새벽에 누군가가 재밌는 질문을 올려놨다. 짧은 글이라 그냥 휙 보고 넘기려 했다. 그런데 글을 보고 고민했는데 나도 감이 잡히질 않아서 아침에 직접 dev C++를 켜고 값을 찍어보았다. 올라온 질문은 다음과 같았다. 배열은 포인터와 유사하지만 포인터 상수이다. 즉 대입이 불가능하다. 근데 왜 전자의 경우에선 오류가 나지 않고 후자의 경우에서 오류가 발생하는가? void function(int a[]){ int b[5]; a = b; } void main(){ int a[10]; function(a); } void main(){ int a[10]; int b[4]; b = a; } 배열은 배열의 첫 번째 요소의 주소값을 가지고 있는 것이다. 배열 변수는 주소값을 받을 수 있으니 b = a; 와 같이 만든..

C & C++/C 2021.11.21

기왕이면 colab pro를 쓰자

사진을 웹캠으로 찍었을때 무슨 숫자인지 알아맞히는 숫자인식을 하려고 근 이틀동안 colab에서 코드를 짜는 중이다. 그런데 오늘 오후 내내 이리저리 코드를 수정해보면서 GPU로 학습을 진행했는데 잘때쯤이 되니까 이게 떴다. 에폭 20에 배치사이즈 128정도 되는 분량을 돌렸다가 또 코드를 수정하고 또 돌리고 한참을 해서 GPU를 많이 써서 그런 것 같다. 전에 colab pro를 결제해서 사용할땐 이런적 없었는데 역시 무료라서 한계가 있나보다. 기왕이면 colab pro를 쓰자. 얼마 안한다. 그래서 사실 지금 CPU로 돌리고 있다는건 비밀... 돌리다가 도저히 진행이 안되는것 같아서 포기하고 그냥 자는것도 비밀... ㅋㅋ

인공지능 2021.11.18

2021AI엔지니어 고급반 - YOLO with deeplearning 결과물 업로드

결과물로 나온 영상들을 업로드한다. 결과물1 결과물2: 결과물3: 나머지 2개의 결과물이 더 있는데 아마 저작권이 걸릴것같아서 업로드하지 못할것 같아서 아쉽다. (아직 성능 개선의 여지가 너무 많은 것 같아서 좀 더 시간이 있었다면 더 좋은 퀄리티를 만들어낼 수 있었을 것 같지만 다른 팀들도 마찬가지였을거라고 생각하니 3등도 아쉽지는 않다. 다 똑같은 시간을 받았으니 동메달에 감사하자!) 올리지 못한건 마이클잭슨의 뮤직 비디오 중 하나이고 다른 하나는 TV방송 프로그램중 하나인 비정상회담의 일부 장면인데 올리면 안될 것 같아서 개인적으로 간직해둬야할것 같다.

인공지능 2021.11.09

[C] 시스템 프로그래밍

예전에 공부하면서 작성했던 C system programming 예제를 첨부한다.  전반적인 시스템 코드 작성 예제가 두루 포함되어있어서 도움이 많이 될거다.   2주차 code3-1#include#include#include#includeint main(){ int filedes; char fname[] = "afile"; if((filedes = open(fname, O_RDWR)) == -1){ printf("%s cannot be opened. \n", fname); } close(filedes); return 0; }code3-2#include#include#include#define PERMS 0644char *filename = "newfile";void main(){ int fd; if(..

C & C++/C 2021.11.08

[DevC++] Dev C++ 테마 변경하기

시스템 프로그래밍을 할일이 생겨서 최근 Dev C++과 gcc를 많이 쓰고 있다. Dev C++에서 코드를 좀 이쁘게 보자. Dev c++ 의 테마 변경은 우선 편집창에서 도구를 선택한다. 선택하고 나면 편집기 설정이 있는데 편집기 설정으로 들어간다. 편집기 설정에 들어가면 구문/문법이라는 메뉴가 있는데 그곳을 클릭한다. 그리고 왼쪽하단의 색조합을 누른다. 여기서 이제 편집기 테마를 선택할 수 있다. 나는 눈이 편한 Borland를 골랐다. 나머지 테마중에 어두운 글씨가 잘 보이지 않는 테마가 있다. Borland테마가 가장 눈이 잘 들어온다.

개발툴 2021.11.07

[Cipher] Elgamal - 엘가말 암호

저번에 확장 유클리디안 알고리즘때문에 꽤나 고생을 한적이 있는데 이번에는 엘가말이라는것을 만나게 됬다. 흑 복호화부분이 하나의 식이 있는게 아니라 상당히 다양하게 변형된 방법들이 있어서 헷갈렸다. 예를 들어서 하나의 동작이 있다고 하면 그 동작을 두부분으로 나눠서 진행하는 방법이 있다거나 아니면 곧장 답으로 직행할 수 있는 방법이 있다거나 하는 식이었다. 아래 유튜브에 어느 분께서 직접 풀이를 진행하시는데 가장 쉽게 이해할 수 있는 영상인것 같다. https://www.youtube.com/watch?v=QrsGVeZV7q8

Computer Security 2021.10.31

[Security] 컴퓨터보안에서 부인방지란 무엇일까?

부인방지라는 용어를 듣게 되었는데 처음 듣는 용어이지만 중요하지 않다고 생각해서 맥락상 의미만 추측만 하고 지나갔다. 그런데 계속해서 반복해서 등장하기에 그 의미를 정확히 찾아보았다. 사전적 정의는 아래와 같다. 사전적 정의가 아주 간단 명료해서 이것만 봐도 무엇인지 이해가 될 것이다. 부인방지: Non - repudiation 더보기 메시지의 송수신이나 교환 후, 또는 통신이나 처리가 실행된 후에 그 사실을 사후에 증명함으로써 사실 부인을 방지하는 보안 기술. 예를 들면, 전자 우편이나 메시지를 송신하고도 송신하지 않았다고 주장하는 송신자의 부인을 막는 송신 부인 방지(non-repudiation of origin), 메시지가 송달(전달)된 사실을 송달되지 않았다고 주장하는 수신자의 부인을 막는 송달 ..

Computer Security 2021.10.29
반응형