전체 글 85

ARP(Address Resolution Protocol)와 MAC, IP address

ARP란? Address Resolution Protocol(ARP)은 IP 주소를 MAC 주소로 변환하는 데에 쓰이는 프로토콜이다. MAC 주소와 IP 주소 IP 주소 - 네트워크 계층인 3계층에서 forwarding에 쓰이는 주소로, IPv4 주소는 32bit이고 IPv6 주소는 128bit이다. - datagram(3계층의 PDU, Packet Data Unit)를 destination 네트워크로 보내기 위해서 쓰임. - 인터넷에 연결된 호스트나 라우터의 인터페이스에 할당된 주소이기 때문에 장소를 이동하면 주소가 변화함. 컴퓨터가 아니라 네트워크에 할당된 주소인 것. - 우리가 이사를 가면 우편주소가 변화하는 것과 비슷함. MAC 주소 - 링크 레이어, 2계층에서 같은 네트워크 내의 한 interf..

CS/네트워크 2022.03.29

Spring boot와 SMTP로 이메일 발송 기능 구현하기

졸업 프로젝트를 진행하면서 이메일 발송 기능을 맡아서 구현하였다. 생각 외로 까다롭지 않아서 구현하는데 그렇게 오랜 시간이 걸리지 않았다. 내가 구현하고자 했던 메일 발송 기능 프로세스는 다음과 같다. 사용자에게 이메일을 입력 받는다. 해당 이메일로 링크와 이미지가 포함된 메일을 발송한다. 회원가입/로그인 기능이 없는 웹에서 구현하는 것이었기에 OAuth, 세션 관련 처리를 해주지 않아도 되어서 매우 간단했다. 회원가입 인증 메일을 구현하고자 하는 사람에게는 이 글이 말하는 방법이 충분하지 않을 것이란 걸 미리 말해둔다. 1. build.gradle에 라이브러리 추가 build.gradle에 메일 관련 라이브러리를 먼저 추가한다. 2. properties(yml) 파일에 SMTP 서버 정보 추가 이때 u..

e-mail protocol: SMTP, POP3, IMAP이란?

우선 프로토콜이란, 어떤 행위를 할 때 필요한 규칙과 형식 등을 정해놓은 것이다. 아주 간단한 예를 들면, 친구와 쪽지를 보낼 때 맨 처음에는 본인 이름을 쓰고 한 줄을 띄운 후에 하고 싶은 말을 적기로 하는 것도 일종의 프로토콜이라고 할 수 있다. 이메일 프로토콜인 SMTP와 POP3, IMAP 은 이메일 메시지를 발송하고 수신할 때 사용하는 형식과 송수신 규칙을 정해놓은 것이다. 이때 우리는 이메일 메시지를 작성하여 메일 서버에게 전송하는 행위를 하는 일개 사용자를 Mail User Agent(MUA)라고 칭하고, outgoing, incoming 메시지를 저장하고 이메일을 전달하는 서버를 Mail server 혹은 Mail Transfer Agent(MTA)라고 부른다. 메일을 발신하려는 MUA는 ..

CS/네트워크 2022.01.11

기존의 얼굴 인식 모델들(FaceNet, VGG-Face)을 이용해 한국인 얼굴 인식해보기

기존의 얼굴 인식 모델들을 이용하여 한국인 얼굴을 인식해보기 졸업프로젝트로 기획하고 있는 서비스를 구현하기 위해 기존의 얼굴 인식 모델들인 FaceNet, VGG-Face, OpenFace 등으로 한국인 얼굴 인식도 높은 정확도로 수행할 수 있는지 검증하는 절차가 필요했다. 만약 기존의 모델로는 동양인 특히 한국인의 얼굴 인식에서 높은 정확성을 기대할 수 없다면, 별도로 한국인 데이터셋으로 학습을 시키거나 우리가 직접 얼굴 인식 모델을 만들어야 하기 때문이다. DeepFace 프레임워크 우선 여러 얼굴 인식 모델들 간의 비교를 위해 파이썬의 DeepFace 프레임워크를 사용했다. DeepFace는 다양한 검증된 모델들을 wrapping하고 있는 경량의 하이브리드 face recognition 프레임워크이..

CS/기계학습(ML) 2021.11.24

Face Detection과 Face Recognition의 차이

Face Detection 개념 정리 얼굴 인식에는 다양한 용어들이 사용된다. Face Detection과 Face Recognition뿐만 아니라 Face verification, Face Identification이 있다. 이러한 용어들을 정리해두었는데도 사용할 때마다 헷갈려서 블로그에 다시 정리한다. 1. Face Detection 우선 face detection은 가장 넓은 개념으로, 사람의 얼굴 자체를 감지하는 일이다. 사진이나 영상에서 사람 얼굴이 있는지, 무엇이 얼굴인지 찾아내는 것 말이다. 구체적인 작업을 예시로 들자면, 카메라가 화면에서 얼굴을 찾고 거기에 포커싱을 맞추는 작업이 될 수 있겠다. 예시 사진은 다음과 같다. 2. Face Recognition face recognition은..

CS/기계학습(ML) 2021.11.23

백준/5430번, AC/C++

백준 5430번 AC c++ 문제풀이 문제 설명 배열이 주어지면 해당 배열을 뒤집거나(R), 처음 숫자를 버리는 연산(D)을 시행한 뒤 최종 결과를 출력한다. 주의할 점 실제로 배열을 뒤집을 생각을 하면 시간초과의 길로 빠지게 된다. 배열의 실제 순서는 상관 없다는 것을 깨달으면 문제가 비교적 쉽게 풀린다. c++의 string에는 split 함수가 없기 때문에 직접 구현하거나, find를 써야 한다. 입력형태가 독특하다는 점을 유의해야 한다. 생각의 흐름 배열을 매번 뒤집으면 시간 초과가 날테니까 덱을 써서 현재 진행 방향에 따라 front나 back으로 다르게 접근하는 게 좋겠다. 비어있는데 에러인 경우나 진행 방향은 bool형 변수를 두어서 확인해야겠네 split 없는데 직접 구현하기 귀찮다.. 근..

[웹] 맛집전공 개발 기록

웹 프로젝트 맛집전공 개발 기록 2021.07.05. ~ 2021.08.01. 교내 웹 개발 동아리에서 처음으로 한 프로젝트이자 내 개발자 인생에서 처음으로 진행한 협업 프로젝트였다. 학기 중에 기획을 구체화하고 방학 1달 간 개발에 돌입했다. 백엔드 개발에 사용한 기술 스택에 대해 정리하고, 개발 과정을 회고하며 간단하게 성찰해보겠다. Spring boot & Gradle 프로젝트 그리고 Spring Data JPA 1. 스프링 부트 Spring은 우리나라 백엔드 개발에서 가장 많이 쓰이는 프레임워크다. 전자정부 표준프레임워크도 스프링을 기반으로 하고 있을 정도. 스프링은 정형화된 패턴과 레퍼런스가 많아 안정적이며 POJO를 기반으로 한다는 것이 장점이지만 설정이 복잡하다는 게 문제였다. Spring ..

LOG/프로젝트 2021.08.16

MySQL 테이블 컬럼명 변경 방법 & 오류나는 경우 해결법

MySQL 테이블 컬럼명 변경시 오류나는 경우 해결법 MySQL 테이블 컬럼명 변경이라고 치면 나오는 방법은 대개 아래와 같다. alter table 테이블명 change 기존컬럼명 새로운컬럼명 새로운컬럼타입; 그런데 이 방법이 오류가 나는 경우가 있다.내가 접했던 오류는 ALGORITHM=COPY is not supported. Reason: Columns participating in a foreign key are renamed. Try ALGORITHM=INPLACE이다. 바꾸려는 컬럼이 하필 pk라 다른 테이블에서 fk로 쓰고 있던 것이 패착이었다. 저 오류를 그대로 치니까 제일 먼저 나온 stack overflow에서 내놓은 해결법은 그냥 primary key랑 foreign key 드랍하고 ..

Spring Boot 프로젝트 ERROR : port 8080 is already in use 해결 방법

Spring Boot ERROR 해결 과정 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 따라 스프링 부트 프로젝트를 만들고 EC2 서버에 올린 후 배포 자동화 구성을 하던 중 꽤 오랫동안 에러에 시달렸다. 거의 지난 한 달간 고통받았다. 앞으로 돌아가 차근차근히 오타를 바로잡고 났음에도, 나를 기다린 건.. org.springframework.boot.web.server.PortInUseException이었다.🤣 이 에러를 마주한 대부분의 경우 해결책은 매우 간단하다. 1. cmd 창에서 netstat -ano | findstr 8080을 시행 2. 8080 port를 사용하고 있는 task의 id를 기억해뒀다가 tastkill /F /PID (task의 id)를 시행 그러나 내 경우에는 n..

[Clean Code] 13장 동시성

Clean Code 내용 정리; 13장 동시성 여러 스레드를 동시에 돌리는 이유와 어려움, 이런 어려움에 대처하고 깨끗한 코드를 작성하는 방법을 제안하며 동시성(Concurrency)을 테스트하는 방법과 그 문제점에 대해 이야기한다. 동시성(Concurrency)이란? 동시성: '무엇'을 '언제'까지 돌릴지 하는 것에 대한 결합(Coupling)* 을 분리하는 전략. *결합도: 어떤 모듈이 다른 모듈에 의존하는 정도 동시성은 때로 성능을 높여준다. 프로그램이 거대한 루프가 아닌 작은 협력 프로그램으로 비춰지며, 시스템 자체를 이해하기 쉽고 문제를 분리하기도 쉬워지고, 응답 시간과 작업 처리량을 개선시킬 수도 있다. 그러나, 항상 성능을 높여주는 것이 절대 아니다. 오히려 동시..

STUDY/Books 2021.06.09