Anything 30

[CSS] CSS 속성 정리하기

CSS 속성 정리하기 box-sizing CSS를 적용하다보면 border를 적용했을 때, 부모 컨테이너 밖으로 빠져나가는 경우가 종종 발생한다. 이 때, box-sizing: border-box로 설정해주면 테두리와 안쪽 여백의 크기도 요소의 크기로 고려해 빠져나가지 않는다. 기본 값은 box-sizing: content-box이다. opacity 요소의 불투명도를 설정한다. 0에 가까울수록 투명해지고 1에 가까울수록 불투명하다. rgba() rgba는 색상을 표현할 때 사용한다. 4개의 인자를 갖는데, Red, Green, Blue, Alpha(투명도)를 갖는다. a는 생략 가능하다. 투명도는 opacity와 같다. box-shadow 요소의 테두리에 그림자효과를 줄 수 있다. x축 기준 거리, y축..

Anything 2021.10.29

[MySQL] MySQL root 비밀번호를 잊었을 때

MySQL을 사용할 일이 없어 설치 후 방치해둔 상태였다. 다시 사용할 일이 생겨 MySQL을 찾았는데, 다행히도 설치해둔 경로는 바로 찾을 수 있었다. 그런데, root 비밀번호를 모르겠다... 1. 다시 MySQL을 설치하자. 기존에 사용하던 MySQL이 아니라 새로 받으면 root에 대한 설정이 없을 것이라고 판단했다. 그래서 MySQL을 다시 설치했지만, 접속할 수 없었다. 2. 서버인증을 우회하고, MySQL에 접속해 root 비밀번호를 변경하자? mysqld --skip-grant-tables 위 명령어를 사용하면 새로운 프롬프트 창에서 MySQL에 서버 인증 없이 우회해 접속할 수 있다. 접속하고 mysql database에 접근해 user table에서 root 계정의 비밀번호를 변경하려한..

Anything 2021.08.13

Git reset 후 되돌리기

프로젝트를 진행하던 중 코드를 이전으로 되돌리기 위해 git reset --hard origin/master 를 사용해 원격 저장소에 저장된 코드를 불러왔다. 불러온 코드가... 이전 커밋이 아니라 Push를 한 지 꽤 되어 오래전 코드가 돌아왔다.. 생각 없이 reset한 결과는 대참사. 어떻게 복구할 수 있을지 찾아봤는데, git reflog를 실행하면 현재 브랜치에서의 커밋이나 리셋의 기록들을 불러올 수 있다. 각 로그에는 HEAD@{$} 으로 번호가 있다. 리셋 이전의 로그의 번호를 통해 git reset --hard HEAD@{$}을 실행하면 커밋했을 때나, 리셋했을 때의 코드로 돌아갈 수 있다.

Anything 2021.08.09

사용자 인증 방식 (쿠키, 세션, 토큰)

웹 애플리케이션에서 사용자 로그인을 구현할 때, 사용자의 로그인 상태를 구별해야 한다. HTTP는 상태를 저장하지 않는 속성(Stateless)을 갖기 때문에 사용자의 로그인 상태를 구별할 수 없다. 그렇기 때문에, 쿠키, 세션, 토큰을 사용해 사용자 상태를 구별할 수 있도록 돕는다. 쿠키 (Cookie) 쿠키는 클라이언트와 서버 간의 통신에서 주고 받는 대화 수단이라고 볼 수 있다. 서버와 클라이언트의 연결 시 쿠키가 생성되어 브라우저(클라이언트)를 통해 관리된다. 쿠키에는 이름, 값, 만료 날짜, 경로 정보 등이 담겨있다. 호스트 별로 쿠키가 생성되기 때문에 사용자의 정보를 구별할 수 있지만 서버에서 따로 인증 과정이 없기 때문에 쿠키만으로 사용자를 인증하고 구별하는 것은 어렵다. 때문에 세션(Ses..

Anything 2021.07.19

Spring Boot JPA에서 LocalDateTime 처리

Entity 내에서 시간에 대한 처리를 LocalDateTime으로 처리할 때, DB에서는 Timestamp 타입이 아닌 Binary 타입으로 저장된다. 이를 timestamp 타입으로 저장하려면 Converter 객체를 사용한다. 아래 코드로 Converter 객체를 생성한다. package com.scene.board; import javax.persistence.AttributeConverter; import javax.persistence.Converter; import java.sql.Timestamp; import java.time.LocalDateTime; @Converter(autoApply = true) public class LocalDateTimeConverter implements ..

Anything 2021.07.10

DAO와 Repository의 차이

스프링 부트 프로젝트를 진행하면서, Database와 같은 영구 저장소에 대해 참조할 때, DAO라는 표현과 Repository라는 표현이 혼용되거나 혹은 다른 개념으로 설명하는 경우가 있어 정리하고자 한다. DAO DAO는 Data Access Object로 실제 영구저장소에 접근하는 객체다. 문제점 3가지 1) 구현체와 로직이 너무 강한 결합 (MySQL -> Oracle DB 변경하려면....? 수정되는 로직..) 2) 서비스 레이어와 도메인, 인프라 레이어가 결합됨. 3) 개발자 러닝커브 증가 이를 해결하기 위해 DAO 패턴 사용 (어댑터 패턴), DTO를 사용. 도메인에 정의된 Table. DAO로 DB에 접근, 결과 값을 DTO에 담아 리턴한다? Repository Repository는 객체 ..

Anything 2021.07.09

AWS에서 Spring boot 프로젝트 로그인 시간 오래 걸림

Spring boot 프로젝트를 AWS에 배포하고 로그인을 시도할 때 로컬에서와 다르게 시간이 아주 오래걸리고, Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [371,575] milliseconds. 위와 같은 에러 메시지를 볼 수 있음. 문제점 이에 대한 문제는 리눅스 서버의 난수 생성 방식에 대한 문제였다. 자바에서 커넥션을 생성할 때 난수 생성이 필요하다. 기본적으로 /dev/random을 통해 난수를 생성한다. /dev/random은 사용자의 입력 신호가 비트의 형태로 저장되어 난수를 생성할 때 사용하는데, 여기서 문제가 저장된 비트의 size가 충분하지 않으면 /dev/random을 사용하지 않..

Anything 2021.07.08

Mustache에서 세션 값 노출 설정

Session을 통해 로그인을 구현할 경우 Session 값을 확인해 Mustache 템플릿 엔진에 if문과 같은 처리를 할 수 있다. 기본적으로 Mustache에서 if문을 사용하는 방식은 {{#isTrue}} 참일 경우 넣을 것 {{/isTrue}} {{^isTrue}} 거짓을 경우 넣을 것 {{/isTrue}} 와 같이 사용하게 된다. 이 때, 기본적으로 세션 값이 노출되지 않도록 되어있기 때문에 설정이 필요하다. spring.mustache.expose-session-attributes=true application.properties에 위와 같은 설정을 추가해야 한다.

Anything 2021.07.07
반응형