본문 바로가기

개발 관련 부가 지식

(31)
자바 (함수형 프로그래밍) 람다식 자바는 객체 지향 프로그래밍을 지원한다. 하지만 간단한 기능을 수행하는데 객체지향으로는 너무 번거로워서 자바 8부터는 함수형 프로그래밍을 지원하게 되고 이를 람다식이라 부른다 비교 👀 비교할 기능 (해당 interface를 통해 비교해보자) public interface Add { public int add(int x, int y); } 1. 객체 지향 프로그래밍에서 기능 수행 절차 1-1 클래스 생성, 구현할 기능을 가진 메소드 정의 public class AddImpl implements Add{ @Override public int add(int x, int y) { return x+y; } } 1-2 해당 클래스 객체를 생성 ,객체가 가진메소드를 실행 public class TestAdd { pu..
Cannot find symbol 해결해야 할 때 // 문제 상황 ❗ 자바8 스프링 프로젝트 마이그레이션 중 문제가 생겼다. (스프링 3, 이클립스 -> 스프링5, 인텔리제이 + gradle) build 시에 sun.security.~~~ 패키지 관련하여 cannot find symbol이 발생한 것이 그 문제이다. // 문제점 파악 👀 그럼 이클립스에서는 build가 왜 문제가 없었을까? 마이그레이션 전,후의 차이는 다음과 같다. 이클립스는 Java 용 Eclipse Compiler (ECJ) 라고 자체 컴파일러를 사용한다고 한다. 인텔리제이는 프로젝트에 적용한 JDK가 갖고있는 javac 컴파일러를 통해 컴파일을 한다고 한다. 내가 적용한 JDK8 javac 컴파일러는 해당 sun 패키지를 지원하지 않아서 빌드가 되지 않았던 것이다. // 해결 방안..
@keyframes 로 글자 파도타기 표현 Admin Page를 만드는 중에 새로고침 시, 새로고침이 되었음을 표현 해주는게 좋겠다는 생각이 들어 header div에 있는 도메인 글자에 효과를 주기로 했다. html 과 css로 만들 수 있으며, css에 @keyframes 라는 애니메이션 규칙을 통해 만들 수 있다. HTML 작성 H e l l o CSS 작성 .header-text { display:flex; } .header-text span { font-weight:1000; animation: wave 1.5s ease-in-out; animation-iteration-count: 1; } @keyframes wave { 0%, 40%, 100% {transform: translateY(0);} 20%{transform: transla..
Eclipse(이클립스) ClassNotFoundException 해결 방안 회사 업무에 이클립스 기반 프로젝트들이 많은데, 기능 개선을 할 때마다 clean, build 를 해줘야 코드가 제대로 인식이 된다. 근데 가끔씩 방금까지 되던 프로젝트가 ClassNotFoundException 이 뜨면서 프로젝트 실행이 안되는데 처음 이 문제가 생겼을 때, 해결에 시간이 꽤나 걸려서 글을 남긴다.. 인터넷에는 보통 1. Project - Clean 실행 2. Project → Properties → Java Build Path → Order and Export → JRE System Library (체크) 3. Project - Build Automatically (체크) 이렇게 나오는데, 다 했는데도 해결되지 않았고 2번같은 경우는 기존에 체크 없이도 잘만 됬었다. (3번은 필자는 ..
세션 하이재킹(Session Hijacking)에 대해서 세션 하이재킹은 Web에서 유저를 식별하는 세션을 탈취하여 아이디, 패스워드 없이 계정을 도용하는 공격 방법 👀 (Hijacking은 가로채다 라는 뜻) 주로 Stored XSS를 통해 세션 하이재킹 공격이 이루어짐 ❗ Stored XSS 이란? 악성 사용자가 악성스크립트(자바스크립트) 를 게시글 같은 것(서버 db)에 남긴 뒤에, 해당 게시글을 다른 유저가 들어올 때 악성 스크립트가 실행되는 공격 이때 악성 스크립트가 사용자 세션을 공격자 서버에 보내는 것이 포함되어 있으면, 세션 하이재킹이라 부름 대응방안 1. XSS 방어 2. HttpOnly 헤더 3. 세션 발급 시 인증 IP 넣고 검증 1번의 핵심은 사용자의 입력 값이 자바스크립트 형태일 때 어떠한 경우라도 실행되서는 안됨✨ ex) 해당 문구를 ..
시큐어코딩 - Parameter Binding 웹에서 SQL Injection을 방어하기 위해 가장 많이 알고 쓰이는 Parameter Binding 에 대해서 알아보자 ✔ // 취약한 코드 private final EntityManager em; public List findByName(String name) { String query = "select m from Member m where m.name = '" + name + "'"; return em.createQuery(query, Member.class).getResultList(); } 위 취약한 코드 name에 "admin' OR '1'='1" 가 들어가게 되면 String query = select m from Member m where m.name = 'admin' OR '1'='1..
Java ArrayList 구현 자바의 Array는 다른 언어와는 달리 크기를 넣어서 생성하게 되어있다. (따라서 한번 생성하고 나면 크기가 정해짐🤷‍♂️) ArrayList 는? 자바가 제공해주는 라이브러리로, 데이터 추가에 따라 배열의 크기가 늘어난다. ✔ Doubling이란? ArrayList가 배열이 다 차게 되면 배열을 2배로 늘리고, 기존 데이터를 복사해 오는데 이러한 작업을 더블링이라고 한다. 참고✨ ArrayList 는 입력 시간, 검색 시간이 O(1) 이다. ArrayList를 java로 구현해 보았다. public class MyArrayList { private Object[] data; //배열의 object private int size; //배열의 사이즈 private int index; //다음 데이터를 추가..
스프링 Race Condition 해결 방안 레이스 컨디션 해결방안 1. 메소드 선언 부에 synchronized 적용 사용방법 -> public synchronized void decrease(~~) 주의점 ! 메소드에 Transactional 적용되어 있으면 안됌, Transactional 이 있으면 클래스를 프록시로 만들어 decrease 메소드 위 아래로 트랜젹서널을 적용하는데 decrease 후 트랜잭셔널 닫히기 전 사이에 다른 스레드가 접근 가능해짐 , 또한 서버 1대가 아니라 2대 이상일 경우에도 단일 스레드가 보장되지 않는다. 2. Pessimistic Lock 서버 1이 락을 걸고 데이터를 가져가면 다른 서버는 데이터를 가져갈 수 없다. 데이터는 락을 가진 서버만 접근하다. Low나 Table 단위로 락을 걸 수 있음 사용방법 @L..

728x90
반응형