1.
아키텍처 상 다양한 기술(nginx, ec2, docker, redis, jenkins 등)을 사용하셨는데요. 어떠한 이유로 해당 기술스택을 사용하게 되었나요?
•
nginx 도입 이유와 도입하여 얻을 수 있는 장점
답변
•
redis 도입 이유와 도입하여 얻을 수 있는 장점
답변
레디스는 설치가 간편하고 적은 리소스로 많은 데이터를 처리할 수 있으며, 사용이 간단하다는 점에서 적용할 여지가
•
CI/CD 구축에 github - jenkins - docker 를 사용한 이유 (동일한 동작을 하는 다른 기술들도 있는데 왜 이 조합을 선택하게 되었는지 상세한 설명 부탁드립니다.)
답변
2.
코드 컨벤션 상 jpa의 엔티티에는 builder 어노테이션을 사용하기로 설정하셨는데요. builder 패턴을 쓰면 어떤 이점이 있을까요?
답변
3.
서비스 레이어 간 순환참조가 발생하는 이슈로 트러블 슈팅 경험을 작성하셨는데요. 구체적으로 어떤 케이스에 발생하였고 어떤 방식으로 해결하셨나요? 해결한 방식으로 어떤 이점을 얻을 수 있었고 아쉬운 점은 무엇인가요?
답변
4.
spring security를 이용해 인증/인가를 구현하셨는데요. 동작방식에 대해 자세히 설명해주세요. 또 jwt 토큰을 이용한 로그인에서는 완전한 의미의 로그아웃 구현이 어려운데 그 부분은 어떻게 해결하셨나요? 해결하지 못하셨다면 어떻게 해결하면 안전한 로그아웃을 구현할 수 있을까요?
답변
5.
트랜잭션 처리를 적절히 잘 해주셨습니다.
•
@Transactional 사용 시 어떤 경우에 롤백이 되나요? (checked/unchecked exception, error 개념을 이용해 설명해주세요.
강제로 롤백을 하려면 어떤 옵션을 사용해야할까요?
•
@Transactional 에는 propagation(전파) 속성이 있습니다. REQUIRED와 REQUIRES_NEW 의 차이에 대해 설명해주세요.
답변
1.
https 적용을 고려하셨는데 http 와 https 의 차이는 무엇인가요? https 를 도입했을 때 실무에서 어떤 이점이 있을까요?
- HTTP 는 Hyper Text Transfer Protocol의 약자로 인터넷에서 데이터를 주고받는 프로토콜.
서버와 클라이언트간에 데이터를 주고 받을때 사용되는데 이때 데이터를 평문(암호화되지 않고 원래 그 상태로 전송된다는 의미)으로 전송하기 때문에 중간에서 데이터를 탈취할 수 있음. 이를 중간자 공격이라고 부름.
- HTTPS 는 HTTP Secure 의 약자로 SSL/TLS (SSL (보안 소켓 계층), TLS(전송 계층 보안))프로토콜을 통해 데이터를 암호화.
데이터의 무결성과 기밀성이 보장되어 보안성을 기대할 수 있음
- 실무에서 HTTPS는 사용자의 정보(로그인 정보, 개인 정보 등)를 암호화시켜 안전하게 보호할 수 있음. 따라서 구글과 같은 검색 엔진들은 HTTPS를 사용하는 사이트를 더 신뢰.
2.
ERD 설계 상 enum 타입을 쓰셨는데 enum 타입의 특징과 한계는 무엇이 있을까요? (enum타입은 데이터베이스 표준은 아니기 때문에 실무에서는 잘 사용하지 않습니다.)
그러면 db에서는 enum 타입을 사용하지 않고 java 레벨에서는 enum을 사용하려면 어떤 방식으로 구현해야할까요?
- Enum은 미리 정의된 상수들의 집합으로, 이를 사용하여 코드 내에서 안전하게 상수 값을 사용할 수 있는데 단순한 상수 리스트를 넘어서 메서드, 변수, 생성자를 가질 수 있어. 이를 통해 각 상수에 특정 기능이나 상태(유저의 권한 같은)를 부여하는 식의 사용도 가능.
- 그러나 Enum은 한 번 정의되면 새로운 상수를 추가하거나 기존 상수를 변경하는 것이 어려움.
- 데이터베이스에 Enum을 저장할 때는 주로 String이나 Integer 타입으로 변환해서 저장하고 Enum 클래스 내에서 toString()이나 ordinal() 메서드를 사용하거나, 커스텀 메서드를 정의해서 사용함
3.
ERD 상에 문자열을 String 타입으로 설정하셨는데 Mysql 에서 일반적인 문자는 char, varchar 타입으로 저장합니다.
char, varchar 의 차이점은 무엇일까요? 또 실서비스에서 유지보수를 고려한다면 주로 어떤 타입으로 정의하는 것이 좋을까요?
- char은 고정된 길이의 문자열을 가지며, 만약 저장될 문자열이 길이보다 짧다면 나머지는 공백을 채웁니다.
고정타입이므로 추후 연산이 필요없기 때문에 검색속도가 빠릅니다.
varchar는 가변타입 문자열이며 최대로 지정한 길이만큼을 저장할 수 있지만 문자열이 그보다 짧다면 저장되는 문자열 길이
만큼만 저장됩니다.
저장용량을 효율적으로 사용햘 수 있다느 장점이 있습니다.
유지보수를 고려한다면 정해진 길이만큼을 사용하는 우편번호, 전화번호 등의 경우에는 char 타입을 사용하며
그 외의 케이스에는 varchar를 사용할 것 같습니다.
ERD 설계 상 식별 관계와 비식별 관계를 분리하여 설계해주셨는데요. 어떤 기준으로 나누어서 작성하셨나요?? 그리고 식별관계와 비식별관계의 차이와 장단점은 무엇일까요?
•
1.
nginx를 reverse porxy로 사용하셨는데 일반적으로 proxy라고 하면 forward proxy를 말하는데 forward proxy와 reverse proxy는 각각 무엇인가요? 그리고 각 proxy의 쓰임은 어떻게 다른가요?
•
프록시 서버 위치에 따라 forward 와 reverse로 구분합니다.
포워드 프록시는 클라이언트와 인터넷 사이에 있어서 클라이언트 정보가 서버에 노출되지 않는다는 특징이 있습니다.
기능으로는
정적파일을 캐싱하여 빠른 응답을 할 수 있는 캐시서버를 구현
보안을 위한 특정 사이트 차단 구현
2가지 기능을 적용할 수 있습니다.
리버스 프록시는 클라이언트 요청을 서버 대신 받아서 전달하며 클라이언트에게 서버노출이 안되는 장점이 있습니다.
포워드 프록시보다 적용할 수 있는 기능이 많으며
로드밸런서 구현
캐시서버 구현 (포워드와 동일)
무중단 배포
SSL 암호화 적용
등의 기능을 사용할 수 있습니다.