본문 바로가기

분류 전체보기

(193)
객체지향 프로그래밍(OOP), REST API 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요 객체지향 프로그래밍에서는 데이터와 함수를 하나의 개념인 "객체"로 묶어서 관리합니다. 이러한 객체들은 상속, 다형성, 캡슐화, 추상화 라는 개념을 통해 관계를 형성하며, 이를 통해 유지보수와 확장성이 좋은 프로그램을 만들 수 있습니다. 1.캡슐화 캡슐화는 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미합니다. 캡슐화를 하는 목적은 정보은닉에 있습니다. 자바에서는 필드를 private로 선언해서 정보 은닉을 시킬 수 있는데, 어떤 객체를 이용할때, 그 객체의 내부 정보를 알 필요도 없거니와, 객체의 정보를 함부로 변경하는 것을 막기위해 정보은닉을 할 수 있습니다. 때문에..
29주차 개발일지 팀프로젝트가 끝나고 한주간 쉰 다음 모의면접을 보고, 프로젝트에 캐싱을 적용해 보았다. 모의면접을 봤을때 아쉬웠던 점은 평소에 알았다고 생각했던것들을 제대로 대답하지 못한 점이었다. 어떤 코드나 어떠한 기술을 왜 적용했는지 평소에 생각하고 쓰고 있다고 생각했는데, 아직 많이 부족하다고 느꼈다. 클러스터드 인덱스라는 것에 대해서는 아예 모르고 있던 것인데 찾아보니 면접 질문으로 많이 나오는 질문이라고 한다. 기술면접 대비를 좀 더 해야겠다는 생각이 들었다. 그리고 기존 프로젝트에 캐싱을 적용했다. 우리 프로젝트에서는 매 페이지마다 프로필을 로딩하고, 구조상 프로필을 로딩할때마다 쿼리를 두개씩 날리게 되는데, 한번 로그인하면, 그 정보를 캐싱해서 프로필을 로딩할때 날아가는 쿼리를 줄여 보았다. 실제 페이지에..
23년 03월 24일 레디스 캐싱2 어제 한 캐싱을 이용해 성능 개선을 시도 해 보았다. 우리 프로젝트는 profile불러오기는 userDetails를 통해 받아온 username을 통해 프로필을 db에서 한번 더 조회해 오는 방식이었는데, 캐싱한 데이터를 돌려보내는 방식으로 바꾸었다. 성능 개선 전 성능 개선 후 100ms -> 13ms로 성능이 개선된 걸 볼 수 있다. 또한 프로필 변경이나 유저정보 변경이 일어나면 캐싱된 데이터와 DB 데이터의 불일치가 생길수 있기 때문에, 회원탈퇴, 로그아웃, 프로필변경 등의 메서드에 @CacheEvict를 걸어주어 변경이 생기거나 로그아웃시에 캐시된 정보를 삭제하도록 했다.
23년 03월 23일 레디스 캐싱 기존에 만들었던 프로젝트에 캐싱 적용을 시도 해 보았다. 우리 프로젝트는 스프링 시큐리티의 @AuthenticationPrincipal과 userDetails를 통해 토큰에서 유저정보를 호출했었는데, 그때마다 db에서 유저정보를 호출하는 쿼리가 하나씩 날아가는게 비효율적으로 보였다. 이를 캐싱으로 해결 해 줄 수 있을것 같아 캐싱을 해 주었다. 일단 레디스를 통해 캐싱을 하고 싶었기에 설정을 해 주었다. 그리고 userDetails의 DB에서 user를 호출하는 메서드에 @Cacheable을 붙여주었다. 그런데 여기서 문제가 생겼다. user엔티티는 localdatetime인 createdAT,modifiedAt이라는 필드를 가지고 있는데,이 localdatetime을 직렬화해서 받을수 없는 예외가 발생..
23년 03월 20일 모의면접 저번주에 캠프 모든 과정이 끝났기에 휴식을 취하고 면접대비를 했다. 그리고 오늘 모의면접을 봤었는데 긴장을 해서 제대로 대답을 하지 못했던 것들이 많았던 것 같다. 전체적으로 긴장해서 대답을 다 잘하지 못했지만 가장 아쉬웠던건 1. REST API가 무엇인가 2. 정규화 원칙에 대해서 설명 3. 클러스터드 인덱스란 무엇인가? 이 세가지 질문에는 대답도 하지 못했던 것이 아쉬웠다. 특히나 1번 2번에 대해서는 공부를 했었는데도 대답을 하지 못했다. 3번은 아예 처음 들어본 개념이었는데, 찾아보니 기술 면접에 자주 나오는 질문이라고 한다. 나중에 조금 더 공부해서 정리해놓아야 할 필요성을 느꼈다.
28주차 개발일지 프로젝트 배포를 했다. 배포를 하면서 익숙한 문제와 익숙하지 않은 문제들을 만났다. 일단 집 유선인터넷으로 ssh port 22번으로 접속이 되지 않는 문제가 있었는데 ec2에서 다이렉트로 접속해서 ssh접속 포트를 바꿔줌으로써 해결했다. 그리고 프로젝트를 올려서 빌드를 시켰는데 properties에 있는 민감정보를 암호화시켜놨는데 이를 복호화 하지 못해서 빌드가 되지 않았다. 이 문제는 우분투 환경변수로 키를 줌으로써 해결했다. 세번째는 프론트는 https인데 백엔드 부분이 https가 아니라 생기는 mixed contents? 오류가 있었다. 백엔드 부분도 nginx를 사용해 https배포를 해 해결을 하였다. 네번째는 xss문제가 있었다. 정말 기초적인 xss공격인 같은 것도 못막고 스크립트가 포함..
23년 03월 11일 배포 후 xss에 대한 대비를 해 주었다. xss란 사이트 간 스크립팅, 크로스 사이트 스크립팅(영어: Cross-site scripting XSS[*])은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있다. 만든 사이트가 기본적인 스크립트에 대해서 방비가 하나도 되어있지 않기때문에 설정을 해 주었다. 메인페이지에서 상품들을 페이징해서 띄우는데, 만약 상품이름에 란 스크립트가 들어가 있으면 메인페이지만 띄워도 저렇게 알럿이 뜨게 된다. 찾아보니 lucy-xss-servlet-filter를 사용해서 막을 수 있는 방법이 있다는데 먹히지 않았다. 이유는lucy-xss-servlet-filter가 form-data 방식에만 유효하고, j..
23년 03월 9일 nginx를 이용한 백엔드 https배포에 성공했다. 백엔드도 https다 보니까 어제 보았던 mixed content 오류도 해결 되었다. cors처리는 사전에 해 주었기 때문에 문제없이 통과했다. 그런데 이쯤에서 고민이 생겼다. 배포시의 url과 로컬테스트시의 url이 다른데 백엔드 부분은 건드릴게 별로 없다지만 프론트는 그 많은 api를 전부 바꿔서 테스트 해야한다. 그래서 매니저님한테 질문을 했더니 export import를 이용해 보라고 하셔서 이용해 보았다. 테스트용 변수와 업로드용 변수를 나눠서 export, import해주었다. 그런데 여기서도 문제가 생겼는데 임포트를 하려면 스크립트 타입을 모듈로 받아야 한다. 그런데 스크립트 타입을 모듈로 받아버리면 onclick()이 작동을 하지 않는..
23년 03월 08일 어제 한참을 고생했던 properties암호화를 우분투에서 복호화 하는 방법을 알아냈다. 같은 캠프 동기분이 알려주셨는데 우분투 환경변수를 이용하면 간단하게 키를 줄 수 있다. sudo nano ~/.bashrc를 입력한 뒤, export myvalue ="key" 이런식으로 입력을 하고 저장해주면 우분투에서 할 일은 끝났고, 스프링에서 우분투 환경변수를 사용할 곳에 ${key} 를 넣어주면 정상적으로 인식을 한다. 그러고 있다보니 쿼리쪽에서도 문제가 하나 있었는데, address가 변경되면서 user의 필드가 아닌, 연관관계로 설정되었는데, 저 오류가 뜨는 api의 경우에는 시큐리티쪽에서 loadbyusername을 통해 가져온 user를 그대로 재사용 하고 있었다. 그래서 lazy객체인 address..
23년 03월 07일 aws ec2를 통한 배포를 시도했다. 그런데 에러가 나왔다. properties암호화를 해놓았었는데, 복호화를 시키지 못한다. jasypt의 문제인줄 알아서 설정을 바꿔줬더니 다음과 같은 에러가 떴다. 아직 정확한 해결책을 찾지 못했다. 내일 다시 시도 해볼 생각이다.