직무면접 후기 1

🔔 직무면접 내용 🔔 직무면접 후기 메시징 솔루션 기업 1차 직무면접 전체적인 분위기 가벼운 마음으로 갔지만 막상 자리에 가니 떨리고 초반에 말이 잘 안나왔다. 3대1 면접이었고 다행히 긴장을 풀고 편안하게 해주시려는 모습이 보여서 너무 좋았다. 가벼운 질문 1. 자기소개 및 선퇴사한 것에 대해서 2. 이전 팀에 대해서, 어떤 환경이었는지 등에 대해서 3. 내가 생각하는 백엔드 개발자란? 4. 내 강점은 무엇인지? 5. 우리 회사에 대해 얼마나 아는지? 느낀점 '내 경력에 대해서 어떻게 설명할 수 있을까'에 대해서만 준비했었다. 그래서 업무 관련해서 가벼운 질문은 짧게나마 답할 수 있었지만 그 외에는 즉흥으로 답변해서 좀 아쉬웠다. 특히 '백엔드 개발자란?' 질문을 너무 어버버하게 답변했는데 다음 면접에는 제대로 준비해야할 것 같다. 경력 질문 1. 검색 키워드 관리에 대해서 2. 메시지 성능 개선에 대해서 3. Itsm 알림 대체 서비스에 대해서 느낀점 메시지 솔루션 기업이다보니 2번의 답변을 준비한 시간이 길었다. 물론 현장에서 답변을 하다보니 순서가 꼬이는 부분도 있었고, 내가 기술 용어를 제대로 이해 못한 부분도 많았다. 하지만 내가 이해를 못해도 다시 설명해주셔서 너무 감사했다. 이 과정에서 내가 잘못 알고 있는 용어와 전체 프로세스의 과정 중 부족한 부분을 수정 중이다. 나머지 질문에 대해서는 크게 설명할 부분은 없었지만 이번 면접을 경험해보니 같이 수정해야할 것 같다. 코딩테스트 코딩테스트를 직무면접 합격 후에 할 줄 알았는데 바로 하는건줄은 몰랐다. 물론 당일에 하나 나중에 하나 큰 차이 없을 것 같아서 바로 진행한다고 했다. ...

January 3, 2025 16:38 · 2 min · 258 words · nakji

네이버 로그인 과정

🔔 네이버 로그인 검증 과정 네이버 로그인하기까지 어떤 과정을 거치는가? 1. 세션 유지 및 위조 방지용 상태 토큰 생성 // CSRF 방지를 위한 상태 토큰 생성 코드 // 상태 토큰은 추후 검증을 위해 세션에 저장되어야 한다. public String generateState() { SecureRandom random = new SecureRandom(); return new BigInteger(130, random).toString(32); } // 상태 토큰으로 사용할 랜덤 문자열 생성 String state = generateState(); // 세션 또는 별도의 저장 공간에 상태 토큰을 저장 request.session().attribute("state", state); return state; CSRF 공격을 방지하기 위해 애플리케이션과 사용자 간의 상태를 보유하는 고유한 세션 토큰을 만들어야 한다. 이 세션 토큰을 상태 토큰(state token) 이라 하며, 상태 토큰의 값은 사용자가 네이버 로그인을 진행하는 동안 유지되어야 하며 고유한 값이어야 한다. 생성한 상태 토큰은 세션이나 별도의 저장 공간에 저장해야 한다. ...

December 24, 2024 17:56 · 3 min · 448 words · nakji

4D4cat) 네이버 로그인 연동을 위한 MVC 테스트 1

🔔 MVC Test 코드 작성 네이버 연동 페이지에 접근이 잘 되는가? LoginController.java @Controller @RequiredArgsConstructor @RequestMapping("/login") public class LoginController { private final NaverLoginService naverLoginService; @GetMapping("/naver") public void naverLogin(HttpServletResponse response) throws IOException { response.sendRedirect(naverLoginService.getNaverOauth2LoginUrl()); } } naverLogin {URL}/login/naver로 접근하면 Naver 로그인 인증을 위한 페이지로 이동된다. 리다이렉트 URL은 naverLoginService에서 받는다. NaverLoginService.java @Service @RequiredArgsConstructor public class NaverLoginService { private static final String BASE_URL = "https://nid.naver.com/oauth2.0"; private final AppProperties app; private final ThirdPartyProperties secrets; public String getNaverOauth2LoginUrl() { String authorizeUrl = BASE_URL+"/authorize"; String callbackUrl = getServiceUrl()+"/login/naver/callback"; return UriComponentsBuilder .fromHttpUrl(authorizeUrl) .queryParam("response_type", "code") .queryParam("client_id", secrets.naver().naverId()) .queryParam("redirect_uri", callbackUrl) .queryParam("state", "random") .toUriString(); } public String getServiceUrl() { return app.serviceUrl(); } } AppProperties 현재는 도메인 URL만 세팅되어 있다. ...

December 23, 2024 22:33 · 2 min · 303 words · nakji

스프링 시큐리티 기본

🔔 스프링 시큐리티 개념 스프링 가이드를 참고하여 스프링 시큐리티의 기본을 공부해보았다. WebSecurityConfig @Configuration @EnableWebSecurity public class WebSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { RequestCache nullRequestCache = new NullRequestCache(); http .requestCache((cache) -> cache .requestCache(nullRequestCache) ) .authorizeHttpRequests((requests) -> requests .requestMatchers("/", "/home").permitAll() .anyRequest().authenticated() ) .formLogin((form) -> form .loginPage("/login") .permitAll() ) .logout((logout) -> logout.permitAll()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } } @EnableWebSecurity를 설정하여 시큐리티를 활성화시키고 securityFilterChain와 userDetailsService를 구현했다. ...

December 20, 2024 17:50 · 3 min · 636 words · nakji

빌더 패턴 (Builder Pattern)

🔔 빌더 패턴이란? 🔔 기존 생성자 방식과의 차이점 What? Why? 빌더 패턴(Builder Pattern)은 복잡한 객체를 단계별로 생성할 수 있게 해주는 디자인 패턴이다. 객체의 생성 과정을 추상화하여, 다양한 형태의 객체를 유연하게 생성할 수 있도록 도와준다. 기존 생성자 방식과의 비교 기존 생성자 방식 기존의 생성자 방식은 객체를 생성할 때 필요한 모든 파라미터를 생성자에 전달해야 한다. public class User { private Long id; private String userId; private String username; private Set<Role> roles; // 기타 필드 및 메서드 public User(Long id, String userId, String username, Set<Role> roles) { this.id = id; this.userId = userId; this.username = username; this.roles = roles; } } 빌더 패턴 방식 빌더 패턴을 사용하면 객체의 필드를 단계별로 설정할 수 있으며, 가독성이 높아지고 선택적인 필드를 쉽게 처리할 수 있다. ...

December 19, 2024 13:02 · 2 min · 354 words · nakji

테스트 도구는 어떤게 있을까?

🔔 테스트 도구 JUnit, Mockito 🔔 테스트 시나리오 작성, GWT JUnit @Test 해당 메서드가 테스트 메서드임을 나타냅니다. @Test void myTest() { /* 테스트 로직 */ } @BeforeEach 각 테스트 메서드가 실행되기 전에 실행되는 메서드를 지정합니다. @BeforeEach void setUp() { /* 초기화 로직 */ } @AfterEach 각 테스트 메서드가 실행된 후에 실행되는 메서드를 지정합니다. @AfterEach void tearDown() { /* 정리 로직 */ } @BeforeAll 모든 테스트 메서드가 실행되기 전에 한 번만 실행되는 메서드를 지정합니다. 정적 메서드이어야 합니다. ...

December 18, 2024 12:13 · 3 min · 477 words · nakji

테스트는 어떻게 하는게 좋을까?

🔔 테스트 방법 테스트 방법 새로운 기능을 개발하거나 수정할 때, 내가 원하는 시나리오대로 동작을 하는지 검증하는 과정은 필요하다. 그것을 위해 테스트 과정이 있고 원하는 상황에 원하는 결과가 나오는지 판단해봐야 한다. 어디까지 테스트를 해야하는지는 각 상황마다 다르겠지만 내가 이전 회사에서 테스트할 때 꼭 확인했던 부분은 아래와 같다. 브라우저 환경(Chrome, Edge, IE 등) 운영/개발 환경 로그인/비로그인 위 항목을 포함하여 상황별 테스트 케이스를 작성하고 테스트를 했었지만 효율적인 테스트 코드를 작성한 것이 아니었다. dev 서버는 해당 서버에 소스를 올린 후에 테스트했었는데 하나라도 잘못된 결과가 나오면 다시 재커밋 후 테스트를 진행했다. 로컬도 마찬가지이지만 이처럼 테스트 코드를 작성하면서 테스트하는 환경이 아니었기 때문에 검증 과정이 불편했다. ...

December 15, 2024 23:32 · 2 min · 246 words · nakji

4D4cat) 프로젝트 개선

🔔 프로젝트 소개 🔔 프로젝트 개선 과정 프로젝트 소개 4d4cat 의미 4d4cat 프로젝트는 내가 구현해보고 싶은 기능을 다 넣어서 원하는 때에 사용해보고자 만든 프로젝트이다. 이는 만화 도라에몽에서 나오는 4차원 주머니에서 여러 가지 물건을 꺼내는 것처럼 **4차원(4th-Dimension), 주머니(pocket)**를 변형해서 만든 명칭이다. 목적 구현하고 싶은 기능은 크게 데이터 수집과 서드 파티 사용이다. 데이터 수집 현재 구글 트렌드 데이터 기반으로 일별 인기 검색어를 저장 노출 기간은 최근 한달 이내의 데이터 구글 트렌드 API 관련 오픈소스 사용 인스타그램의 키워드도 수집하려고 했으나 최근에 지원 종료(예정) 서드 파티 ...

December 12, 2024 15:45 · 2 min · 227 words · nakji

TCP/IP 4계층

🔔 TCP/IP 모델의 개념과 동작 원리 🔔 TCP/IP 모델 계층별 특징 🔔 TCP와 IP 비교 What? Why? OSI 7 Layer 모델이 이론적 모델로 만들어진 것에 비해 TCP/IP 4 layer 모델은 실제 인터넷 프로토콜을 반영하여 실용적으로 설계되었다. OSI 모델과의 차이점 Application OSI 모델에서 상위 3개의 계층이 통합된 모습인데, 실제 네트워크에서는 OSI 모델의 각 계층이 반드시 구분될 필요가 없다. 기능이 중복되거나 복잡해지기 때문에 단순화가 필요했다. Network Access OSI 모델에서 물리 계층이 빠진 모습인데, 물리적 전송 매체와 데이터(Frame)를 하나의 계층에서 관리함으로써 설계를 단순화하고, 다양한 물리 매체에 대한 호환성을 높였다. ...

November 20, 2024 11:08 · 6 min · 1131 words · nakji

라우터

🔔 라우터의 개념 🔔 라우터와 비슷한 장치 🔔 라우팅 테이블과 라우팅 동작 원리 What? Why? 네트워크 장치 중 하나로, 서로 다른 네트워크 간의 데이터를 전달하고 관리하는 역할을 한다. 주로 LAN, WAN을 연결하며, 데이터 패킷이 목적지까지 효율적으로 도달할 수 있도록 경로를 결정한다. 패킷 전달 수신된 데이터 패킷의 헤더 정보를 분석하여, 목적지 주소에 따라 적절한 네트워크 경로로 전달한다. 라우팅 라우팅 테이블을 유지하며, 이를 통해 최적의 경로를 결정한다. 네트워크 분할 대규모 네트워크를 작은 서브넷으로 분할하여 트래픽을 효율적으로 관리할 수 있다. ...

November 18, 2024 08:08 · 3 min · 586 words · nakji