본문 바로가기

개발

[Java] 자바의 메모리 영역(2) 최근 안드로이드 개발을 담당하면서, 스프링에 의존하여 웹개발을 하던 시기보다, JAVA의 근본적인 원리에 대해 더 깊은 이해가 필요하게 되었다. 새삼 스프링 프레임워크의 강력함에 대해 느끼게 됨과 동시에.. 기초가 많이 부족하다는 것 또한 깨닫게 되었다. 이전에 간략하게 메모리 영역에 대해 포스팅 하였으나, 이 기회에 조금 더 상세하게 이해하고 작성해보고자 한다. 1. 메모리 프로그램을 실행하기 위한 데이터 및 명령어를 저장하는 공간 메모리 구조에 대해 공부해야 하는 이유 같은 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우된다. 메모리 관리가 되지 않는 경우 속도저하나 튕김이 발생할 수 있다. 한정된 메모리를 효율적으로 사용함으로서 높은 성능을 내고자 함. 2. JVM JVM은 Java Virt.. 더보기
[DB]격리수준(Isolation Level) 실제 운영중인 시스템에서, 데이터베이스에 의도하지 않은 값이 들어가거나, 중간에 엉뚱한 Insert 또는 Update 쿼리로 인해 데드락이 발생하는 경우가 있었다.(심지어 Select 임에도 불구하고...) 왜 Select중에 교착상태가 발생하는 것일까...? 의문을 가지게 되면서 데이터베이스의 격리수준에 대해 공부하게 되었다. 데이터베이스의 격리 수준은 대표적으로 4가지로 나뉘어진다.(아래로 갈수록 격리 수준 ↑, 성능 ↓) 1. READ UNCOMMITTED 2. READ COMMITTED 3. REPEATABLE READ 4. SERIALIZABLE 하나씩 살펴보자면 1. READ UNCOMMITTED Commit 되지 않은 데이터를 읽을 수 있다. 즉 하나의 트랜잭션에서 Insert나 Update.. 더보기
[Java]Serialization(직렬화) 스프링에 대해 공부하면서.. Serializable 인터페이스를 구현받는 부분이 있었다. 단순히 직렬화 라고만 알고 있었지, 정확히 어떤 목적으로 사용하는지 확실히 몰랐었기 때문에 이번에 정리해본다. 직렬화가 필요한 상황이라 한다면... 생성한 객체를 파일로 저장하는 경우 저장한 객체를 읽는 경우 다른 서버에서 생성한 객체를 받는 경우 이런 상황에서 필요한 것이 직렬화(Serializable)이다. Serializable 인터페이스를 구현하면 JVM에서 해당 객체는 저장하거나 다른 서버로 전송할 수 있도록 해준다. 자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로.. 더보기
[Spring] Security 정리(1) 지금 실무에서 사용하고 있는 스프링 보안은 인터셉터를 활용하여 구현되어 있으나, 필터를 기반으로 동작하는 스프링 시큐리티에 대해서 확실히 알 필요가 있다고 생각하여(사용은 해보았지만..원리는 잘 모르고 썼었다), 정리해보려고 한다. 1. 스프링 시큐리티의 정의 스프링 기반의 애플리케이션의 보안을 담당하는 프레임워크이다. 시큐리티를 사용하지 않고 직접 인증, 인가를 구현한다면, 자체적으로 세션을 체크하고, 페이지를 redirect 해주는 등 직접 손보아야 할 일이 많아질 것이다. 2. 보안 관련 용어 정의 접근 주체(Principal) : 보호된 대상에 접근하는 유저 인증(Authenticate) : 현재 접근하는 유저가 누구인지 확인, 애플리케이션의 작업을 수행할 수 있는 주체임을 증명 인가(Author.. 더보기
[JPA] JPA의 어노테이션(1) JPA는 자바의 대표적인 ORM(Object Relational Mapping) 프레임워크이다. 즉 객체지향언어의 객체를 RDBMS(관계형데이터베이스)와 자동으로 매핑해주는 개념이고, JPA는 이러한 ORM의 대표적인 기술 표준이다. 이전 글에서도 간단히 몇 가지를 언급하였지만, JPA에서 주로 사용되는 어노테이션이 어떤 것들이 있는지 기록해본다. @Entity : 테이블과 1:1로 매칭이 되는 객체의 단위이며 엔티티에는 적어도 하나의 Id가 필요하다 @Id : DB 테이블은 기본적으로 유일한 값(Primary Key)을 가진다. JPA에서는 이러한 PK를 @Id를 통해 지정해준다. @Table(name = "XXXX") : 엔티티의 클래스명 그대로 테이블명을 사용한다면 상관없지만, 따로 매핑되는 테이블.. 더보기
[HTTP] 비연결성 만약 클라이언트와 서버가 통신을 함에 있어서 계속 연결을 유지하고 있다면... 클라이언트의 수가 늘어날수록 연결상태가 늘어날 것이고, 결국 서버는 다량의 자원을 소모하게 된다. 비연결성을 지향하는 HTTP의 경우 클라이언트의 요청에 응답 후 연결을 끊어주는 방식으로 시스템의 자원을 유지한다. 다만 매번 요청이 있을때마다 TCP/IP 연결을 맺어야한다(3way handshake). 그리고 이전 요청에 대한 상태를 유지하기 위해 Cookie와 Session을 이용한다. HTTP 1.1에서 이러한 문제를 해결하기 위해 지속연결(Persistent)개념이 등장한다. 해당 요청과 관련된 모든 자원의 요청이 끝날때까지 연결을 유지한다. 더보기
[Java] 자바의 메모리 영역(1) 메소드(Method) 영역 Static 영역이라고도 하며 전역 변수와 정적 멤버변수(static 변수)가 저장되는 영역 스택(Stack) 영역 지역변수, 인자값, 리턴값이 저장되는 영역이고 메소드 안에서 사용되는 기본형 변수들이 값과 함께 저장되고 Heap 영역에 생성된 객체들을 참조하는 주소값이 할당 힙(Heap) 영역 자바 프로그램에서 사용되는 모든 인스턴스 변수(객체)들이 저장되는 영역이며 자바에서는 new를 사용하여 객체를 생성하면 힙 영역에 저장. 힙 영역은 메모리 공간이 동적으로 할당되고 해제되며 메모리의 낮은 주소에서부터 높은 주소로 할당 출처 : 코딩팩토리(https://coding-factory.tistory.com/830) 더보기
[Algorithm]구간합 구하기 코딩 테스트 연습을 하다보면 많이 접하게 되는 문제가 일정 구간의 합을 구하는 것이다. 단순히 반복문을 통해 합을 구하는 방법도 있겠지만, 그렇게 되면 시간 복잡도 면에서 제한에 걸리게 되는 경우가 많다. 이럴 때 구간합 배열을 생성하여 해결할 수 있다. 1) 1차원배열 일반 배열이 [5, 4, 3, 2, 1] 이라면 구간합 배열은 [5, 9, 12, 14, 15] 로 나타낼 수 있고 이를 코드로 표현하면.. ------------------------------------------------------------------ for(숫자 개수만큼 반복) { sum[i] = sum[i-1] + arr[i] } -----------------------------------------------------.. 더보기