분류 전체보기
-
스마트폰은 정말 사람은 편리하게 만들어줄까요?기타 2021. 7. 24. 13:52
"스마트폰은 정말 사람은 편리하게 만들어줄까요??" 스타벅스에 앉아 있는데 어떤 어머니 한 분께서 오셔서, 스타벅스 앱 회원가입에 대해서 물어보셨습니다. 쿠폰을 선물받으셨는데, 앱이 있어야 쓸 수 있는 듯 했습니다. 어머니께서는 인증번호를 받기 위해 주민등록번호를 입력하는 것부터 힘들어하셨고, 인증번호가 왔지만 "앱에서 빠져나와 문자를 확인하는 것" 조차 어려워하셨습니다. 앱에서 나온다면 그동안 입력한 정보가 없어질 거라는 생각을 하셨고, 해당 앱에서 다른 앱으로 전환한다는 생각을 못 하신것 같습니다. 인증을 겨우 받고 나니, 아이디/비밀번호를 만들어야 합니다. 아이디, 비밀번호는 당연하게도 "영어"만 입력 가능하고 어르신에게는 외계어와 다름없었습니다. 그래서 어디선가 누군가 만들어주시고, 종이에 적어주..
-
Redis, SpringBoot 연동하기Spring Framework 2021. 7. 16. 17:08
서론 포트폴리오용 백엔드 서버를 구성 후 문득 생각이 들었습니다. "만약에 사람들이 몰려서 DB의 조회가 많이 일어나면 어떡하지?" 물론 아무도 사용하지 않는 사이트지만요ㅎㅎ 검색을 해본 결과 Redis 오픈소스를 사용하면 캐싱을 통해서, 다수의 처리를 쉽게 할 수 있을 것 같았습니다. Spring Data Redis 공식 문서를 참고하여, 기본적인 캐싱을 해보겠습니다. 이 글은 아주 기본적인 Hello World 수준이므로, 더 깊은 내용을 원하시는 분들은 뒤로 가기 누르셔도 됩니다. Redis란? Redis는 in-memory 방식의 데이터 저장소 입니다. 여기서 in-memory 방식이라는 것은 주 메모리(RAM)를 데이터 저장소로 사용하는 데이터베이스 관리 시스템입니다. 즉 SSD, HDD 같은 ..
-
Entity, DTO 그리고 @ServiceSpring Framework 2021. 7. 13. 22:24
서론 Spring Data JPA를 사용하면서 발생하는 여러 문제들 때문에 Entity와 DTO를 분리하는 과정을 담았습니다. 그리고 이 DTO를 어떻게 스프링 컨테이너가 관리하는 Bean으로 등록할 것인지에 대한 고민을 담았습니다. Entity 사용의 문제점 Post(게시글)이 Board(게시판)의 boardNo(게시판 번호) 참조 1개의 게시판에 여러 개의 게시물 --> 1:N (일대다) 매핑 // 애노테이션 생략 public class Board implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long..
-
외래키로 참조 중인 컬럼 수정하기Database 2021. 7. 4. 16:51
1. 서론 아래와 같이 post, user 각각의 테이블이 존재합니다. post 테이블은 user 테이블의 userNo 컬럼을 참조하고 있습니다. create table user ( userNo bigint not null primary key, userId varchar(50) not null, userName varchar(50) not null, userPwd varchar(100) null, constraint user_userId_uindex unique (userId) ); create table post ( postNo bigint unsigned auto_increment primary key, userNo bigint null, title varchar(255) not null, auth..
-
Lambda(람다) 표현식 적용하기Java & Kotlin 2021. 6. 28. 20:09
1. Lambda Expression? 오라클 공식 문서에서는 아래와 같이 설명하고 있습니다. "Lambda expression(이하 "람다식"이라 한다)은 메서드와 비슷합니다. 람다식은 알맞은 형식의 parameters의 목록과 이 parameters로 표현된 body를 제공합니다." "람다식의 값은 functional interface(이하 "함수적 인터페이스"라 한다)의 인스턴스를 생성한다"라고 합니다. 즉 람다식은 기본적으로 메서드처럼 파라미터를 받아, body를 구현합니다. 하지만 이는 함수적 인터페이스의 인스턴스를 생성하는 데 목적이 있습니다. 모든 메서드를 람다식으로 표현을 하는것이 아니라는 것을 알 수 있습니다. 그렇다면 여기서 말하는 "함수적 인터페이스"는 뭘까요? 2. Functiona..
-
앵귤러, 스프링부트를 이용한 Oauth2 회원가입 문제Spring Framework 2021. 6. 23. 23:44
1. 개발환경 프론트앤드 - 앵귤러2, 타입스크립트 백엔드 - 스프링부트 DB - JPA, MySQL 2. 카카오 API를 활용한 Oauth2 회원가입 과정 카카오 API를 활용한 Oauth2 회원가입은 사실 간단합니다. 인가(인증) 코드 request/resposne 발급된 인가 코드로 Access Token request/response Token에서 사용자 정보 추출 후 회원가입 Token 유효성 검증 --> 사용자 정보 추출 --> DB 검증 (로그인 시) 결국 REST API를 바탕으로 요청하고 받고, 반복입니다. 3. 문제점 카카오 Oauth2의 경우 인가(인증) 코드의 경우 발급 후 반드시 'redirect uri'를 입력해야 합니다. 인가 코드를 받을 클라이언트 혹은 서버가 반드시 존재해야..
-
인생 첫 오픈소스 contributor 되다.Contribution 2021. 5. 26. 13:40
자랑 하려고 글 씁니다... 개발 공부 후 처음으로 깃허브 저장소의 Contributor가 되었습니다. 해당 저장소는 앵귤러와 타입스크립트를 이용해서 게시판 API를 호출해서 화면에 바인딩하는 코드입니다. 첫 번째 pull request는 해당 코드에 세미콜론이 빠진 것을 수정했습니다. 사실 아주 간단한 에러라서 이것을 request 해야 할까 고민을 했습니다. 뭐 한 번도 안 해봤는데, 해보자 라는 생각으로 해봤고, 마스터 브랜치에서 commit을 해주셨습니다. 이것에 탄력을 받아 두 번째 request는 타입스크립트에서 property로 string 값을 literal로 넣을 수 없습니다. 변수에 할당 후 property 지정하던가 해야 합니다. 물론 string 값으로 지정해도 컴파일은 문제없이 됩..
-
하이버네이트의 네이밍 전략Spring Framework 2021. 4. 29. 22:29
1. 서론 스프링에서 하이버네이트 사용을 위해 Entity 파일의 필드이름을 자연스럽게 camelCase로 작성했습니다. private String userName 하지만 에러가 발생했습니다. user_name을 찾을 수 없습니다. 저는 분명히 'userName'이라고 입력했는데, 어떻게 된 일 일까요? 2. 하이버네이트 네이밍 규칙 하이버네이트의 기본적으로 적용되어 있는 규칙은 아래와 같습니다 dot(.)은 underscore(_)로 대체합니다 camelCase는 snake_case로 변합니다 소문자로 작성합니다 즉 프로그래머가 필드에서 'userName'이라고 작성하더라도, 하이버네이트는 자동으로 'user_name'으로 변경합니다. snake_case, 소문자 모두 만족하는 네이밍 전략입니다. 3...