반응형
쿠쿠 10인용 밥솥 몇가지를 비교해 보았습니다.

가성비는 CRP-JHR1020FD 가 제일 좋은 것 같습니다.

모델명

CRP-JHR1020FD CRP-JHV1010FB CRP-JHT1010FS

제품명

IH압력밥솥  IH압력밥솥  IH압력밥솥 

용량

10인용 10인용 10인용

출시년월

2016년 10월 2016년 8월 2017년 9월

편의부가기능

     

 

   진공보온  

 

   압력체크 기능(압력센서 적용)  

 

     내솥손잡이적용

 

     맞춤밥맛기능, 맞춤보온기능

 

     버튼잠금기능

 

 대기전력 차단 스위치  대기전력 차단 스위치  대기전력 차단 스위치

 

 초고압 2기압  초고압 2기압  초고압/ 무압취사(이중모션밸브 적용)

 

 Xwall Stainless 코팅 + Full 스테인리스 Eco Curved Wave 내솥  Xwall Stainless 코팅 + Full 스테인리스 Eco Curved Wave 내솥  웨이브내솥

 

 풀스테인리스 분리형 커버  풀스테인리스 분리형 커버  풀스테인리스 분리형 커버

 

 2중모션 패킹  2중모션 패킹  2중모션 패킹

 

 스테인리스 내솥 케이스  스테인리스 내솥 케이스  스테인리스 내솥 케이스

 

 광터치 네비게이션  광터치 네비게이션  광터치 네비게이션

 

 최고급 White LED 디스플레이  최고급 White LED 디스플레이  

 

 밥물고임방지배수로  밥물고임방지배수로  

 

 2중 소프트스팀 캡  2중 소프트스팀 캡  

 

 21중 안전장치  21중 안전장치  

 

 입체보온시스템  입체보온시스템  

 

 음성안내기능  음성안내기능  음성안내기능

 

 야간 음성볼륨 설정기능  야간 음성볼륨 설정기능  야간 음성볼륨 설정기능

 

 자동살균스팀세척기능  자동살균스팀세척기능  

 

 화면조명 절전기능  화면조명 절전기능  화면조명 절전기능

 

 에너지아이기능  에너지아이기능  에너지아이기능

 

 뚜겅 결합 손잡이 램프 기능  뚜겅 결합 손잡이 램프 기능  뚜겅 결합 손잡이 램프 기능

 

 다이렉트 터치  다이렉트 터치  다이렉트 터치

 

 고화력기능  고화력기능  

다양한 요리기능

 백미, 잡곡, 현미, 고화력(백미/잡곡/현미), 누룽지, 삼계탕, 영양죽  백미, 잡곡, 현미, 고화력(빽미/잡곡/현미), 백미저압, 누룽지, 삼계탕, 영양죽, 저/고압찜 고압메뉴: 백미, 쾌속백미, 잡곡, 잡곡쾌속, 누룽지, 슈퍼곡물, 현미발아, 삼계탕 고압찜
무압메뉴: 무압백미, 라면, 이유식, 무압찜, 건강죽

제품크기

  42.3cm(길이)x3.05cm(폭)x29.0cm(높이)  42.3cm(길이)x3.05cm(폭)x29.0cm(높이) 42.3cm(길이)×30.5cm(폭)×30.0cm(높이)

제품중량

 8.6kg  9,9kg  8.7kg

네이버 최저가

461,350 555,570 711,050



반응형
반응형
시스템을 구축하다보면 네트워크 환경 때문에 proxy server가 필요한 경우가 종종 있습니다. 이럴 때 이용하는 gpl 라이센스의 balance를 소개합니다.

- Homepage
https://www.inlab.de/balance.html

- 설치 방법
1. 홈페이지에서 Balance 다운로드
2. 압축 파일을 다운 받은 후 임의의 디렉토리에 압축 해제
3. 압축 해제 디렉토리로 이동
4. make
5. make install
6. 압축 해제 디렉토리에 "balance" 실행 파일 생성 확인

- 실행방법
1. balance -f [local Port] [Forwarding 할 서버 아이피:포트]
ex)
브라우저에서 http://서버IP:20001 로 접속 할 경우 네이버 사이트가 출력 됨.(125.209.222.142는 네이버 IP 임)
balance -f 20001 125.209.222.142:80
반응형
반응형

리눅스에서 그룹을 생성하려면 다음과 같이 명령어를 사용합니다.


groupadd [그룹명]


특정 사용자를 해당 그룹에 넣으려면 다음과 같이 명령어를 사용합니다.


usermod -g [그룹명] [사용자명]

반응형
반응형

안녕하세요. Git Flow 사용 시나리오에 대해서 한번 가정해 보았습니다.



A 라는 업무를 하던 도중에 급하게 B 라는 업무를 먼저 처리해야하는 시나리오 입니다.


업무에서 흔하게 일어나는 시나리오 입니다.



먼저, Git Flow를 이용하지 않고 그냥 메인 브랜치에서 작업하면 이렇게 됩니다.



  1. A업무를 시작
  2. 수십개의 소스를 여기저기 파헤쳐 놓은 상황.
  3. 커밋하면 엄청난 버그와 에러가 발생할 상황.
  4. 4일 동안 작업한 많은 분량.
  5. 앞으로 4일은 더 해야 마무리 될 상황.
  6. 이 때 긴급 장애 상황으로 당장 B업무를 위한 소스를 수정해야 함!!
  7. A업무의 소스를 커밋 할 수도 없고 버리는 건 더 할 수 없음.
  8. OTL


이런 상황은 정말 최악입니다. 로컬 백업을 해서 복구를 하거나 이상한 방법으로 해결해야 될겁니다.


하지만, Git Flow 기능을 이용한 동일한 상황이라면 아래와 같이 대처가 가능합니다.


  1. A업무를 시작
  2. A업무를 위한 브랜치 생성
  3. 수십개의 소스를 여기저기 파헤쳐 놓은 상황.
  4. 커밋하면 엄청난 버그와 에러가 발생할 상황.
  5. 4일 동안 작업한 많은 분량.
  6. 앞으로 4일은 더 해야 마무리 될 상황.
  7. 이 때 긴급 장애 상황으로 당장 B업무를 위한 소스를 수정해야 함!!
  8. A업무의 소스를 일단 모두 커밋 함.
  9. 다시 개발 브랜치로 체크아웃하고 B 업무를 위한 브랜치 생성.
  10. B업무 개발완료 후 B업무를 위한 브랜치를 개발 브랜치에 병합.
  11. 다시 A업무를 위한 브랜치를 체크아웃.
  12. A업무 개발 완료 후 개발 브랜치에 병합.

네, 깔끔합니다. 하루 이상 걸릴 작업은 꼭 Git Flow 기능을 이용해 별도 브랜치에서 작업합시다.



1. 브랜치를 새로 생성할 경우 사용.

2. 브랜치를 좀 더 편하게 생성할 수 있음.

3. 2번의 깃 플로우를 클릭하면 나타나는 창.
 - 새 기능 시작 클릭





새 기능 시작 창


1. 기능명

 - 업무명, 기능명, 모듈명 혹은 이슈 넘버 등


2. 시작지점

 - 최근 개발 브랜치 : 개발 브랜치의 가장 최신 커밋 이력으로부터 브랜치 파생

 - 작업 사본 부모 : 현재 작업 중인 브랜치로부터 브랜치 파생

 - 명시된 커밋 : 특정 커밋 이력으로부터 브랜치 파생


3. 확인 클릭.




“A업무” 라는 새 기능 시작 후 SourceTree 화면






커밋하지 않은 A업무 폭풍 작업내용.






급하게 B 업무를 처리하기 위하여 임시 커밋






1. 현재 A업무 브랜치를 작업 중 입니다.

 - B업무 작업 시작을 위해 master 브랜치로 작업 브랜치를 이동 합니다.

 - master 를 더블 클릭 합니다.


2. A 업무 브랜치 작업 중일 때 Local Git Repository 입니다.


3. master 브랜치로 이동 후 Local Git Repository 입니다.

- 동일한 Local 폴더이지만 현재 작업 브랜치에 따라서 소스파일들이 변경 됩니다.


4. master 브랜치로 이동한 모습입니다.


5. 현재 커밋 이력 포인터가 A업무 브랜치를 시작하기 바로 전으로 이동하였습니다.







A업무와 동일하게 B업무 새 기능을 시작한 후 SourceTree 화면 입니다.






B업무 완료하고 커밋과 푸시  후 SourceTree 화면 입니다.





깃 플로우 메뉴를 클릭하면 나타나는 창 입니다. - B업무 브랜치를 종료하기 위해 “기능마무리”를 클릭 합니다.






 “기능마무리”를 클릭 후 나타나는 창 입니다.

 

!! 문제가 발생 했습니다.

- B업무 및 A업무 기능 시작을 모두 master 브랜치로부터 파생했는데 깃 플로우를 이용한 기능 마무리는 개발 브랜치로만 병합이 됩니다.

- 깃 플로우의 “새 기능 시작” 기능은 개발브랜치에서만 이용하는 것이 맞는 것 같습니다.

- 어쩔 수 없이 “취소”를 클릭 합니다.

- “깃 플로우” 기능을 이용했지만 결국 브랜치이므로 master 브랜치에서 B업무 브랜치를 병합하고 B 업무를 삭제하면 됩니다.





master 브랜치로 이동 후 메뉴의 “병합” 을 클릭 해서 나타난 창 입니다.


B업무를 종료하기위한 병합입니다.

현재 master브랜치에서 B업무 브랜치를 당겨와 병합니다.

빨간 박스를 선택하고 확인을 클릭합니다.





master 브랜치에 B업무 브랜치 병합 후  SourceTree 화면 입니다.


master 브랜치에 B업무 브랜치 병합 후  LocalRepository 화면 입니다.





A업무 브랜치로 다시 돌아온 후 Local Repository 화면 입니다.

A업무 마무리를 위하여 “새 텍스트 문서” 들을 삭제하고,

“A업무완료.txt” 파일을 추가하였습니다.




A업무를 커밋과 푸시하고 master 브랜치에서 A업무 브랜치를 당겨와 병합한 후 SourceTree 화면 입니다.

최종적인 master 브랜치의 Local Repository 화면 입니다. - A업무 브랜치, B업무 브랜치 모두 병합 완료 하였습니다.



반응형
반응형

리눅스에서 CPU 정보를 확인하는 방법입니다.


cat /proc/cpuinfo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 1
cpu cores       : 4
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 2
cpu cores       : 4
apicid          : 4
initial apicid  : 4
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 6
initial apicid  : 6
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 4
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 5
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 1
cpu cores       : 4
apicid          : 3
initial apicid  : 3
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 6
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 2
cpu cores       : 4
apicid          : 5
initial apicid  : 5
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
stepping        : 3
microcode       : 23
cpu MHz         : 3299.992
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 7
initial apicid  : 7
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonst                                                            op_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2                                                             x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dther                                                            m tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6599.98
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
 
cs


반응형
반응형
새로운 리눅스 서버에서 서비스를 하기 위해 시스템을 구성하다보면 오라클11g jdbc 라이브러리를 통해 DB접근 시 아래와 같이 Connection Reset 오류가 발생할 수 있습니다.

1
java.sql.SQLRecoverableException: IO Error: Connection reset



원인으로는 Connection 생성시에 암호화에 사용할 40BYTE 키를 랜덤하게 생성하는데 이 랜덤키를 생성하지 못해서 발생하는 문제입니다.


Java는 리눅스에서 기본적으로 /dev/random 을 통해서 난수를 생성합니다.

이 파일이 난수를 생성하는 기반이 "서버의 장치 드라이버와 기타 소스로부터 모은 환경적 노이즈"를 가지고 난수를 생성하게 됩니다.

그래서 새 서버에서는 OS의 환경적 노이즈가 적어서 난수 생성에 문제가 생기는 겁니다.


해결방법으로는 /dev/urandom 을 대신 사용해서 난수를 생성시키는 겁니다.


방법은 2가지가 있습니다.


1. java vm 옵션을 통해 해당 java 데몬의 난수 생성 파일을 변경하는 겁니다. 

1
2
3
4
5
-Djava.security.egd=file:///dev/urandom switch
 
or
 
-Djava.security.egd=file:/dev/./urandom



2. java 자체 옵션을 변경합니다.

1
2
$JAVA_HOME/jre/lib/security/java.security


위 파일 에서 아래 라인을 추가하거나 수정해 줍니다.

1
securerandom.source=file:/dev/./urandom



/dev/random vs /dev/urandom 바로가기

반응형
반응형

스프링웹mvc에서 자주 쓰는 기능 중 하나인 MultipartFile 의 transferTo 을 사용할 때 주의사항을 하나 공유하고자 합니다.


이 기능은 파일을 업로드 할 때 사용됩니다.


파일을 업로드하면 transferTo 를 통해서 실제 파일시스템에 쓰게(write) 됩니다.


그런데 Servlet 3.0 에서는 절대경로에 파일을 쓸수 없게 제한하고 있습니다. WAS의 지정된 임시 dir에서 상대 경로로만 업로드할 수 있습니다.


하지만 Tomcat에서는 이 부분을 절대경로도 허용해 주고 있습니다. 덕분에 혼란이 가중 된 건 누구 잘못일까요 ㅜㅜ.


Local 은 Tomcat에서 개발하고 테스트 후 Jeus에 배포를 했더니 파일이 계속 Jeus의 임시 디렉토리 하위에 들어갑니다.


한참을 삽질 후에 기술지원을 받고 나서야 이 사실을 알 수 있었습니다. Jeus는 스펙에 따른거라고 하니 Tomcat을 욕합니다.


아래는 transferTo 의 주석에 달린 Note 입니다. Tomcat에서 잘되어서 대충 본 제 잘못이 사실 제일 큽니다. ㅜㅜ


1
Note: when using Servlet 3.0 multipart support you need to configure the location relative to which files will be copied as explained in javax.servlet.http.Part.write.
cs


반응형
반응형

보통 서버의 방화벽이 open 되었는지 확인할 때 telnet 명령어를 사용합니다.

그런데, 특수한 경우 서버에서 텔넷 명령어를 사용할 수 없는 경우가 있는데 이럴때 아래의 간단한 소스로 텔넷을 대신해 포트 방화벽을 확인할 수 있습니다.


- 컴파일 -

javac PortCheck.java 


- 실행 -

java PortCheck www.naver.com 80


이렇게 실행하면 


1. 방화벽이 막혀있는 경우 커넥션 타임아웃 오류가 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
Exception in thread "main" java.net.SocketTimeoutException: connect timed out
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at PortCheck.main(PortCheck.java:11)
 




2. 해당 포트가 리스닝하고 있지 않은 경우 커넥션 리퓨즈드 오류가 발생합니다. 이러면 방화벽은 열린 겁니다.

1
2
3
4
5
6
7
8
9
10
Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at PortCheck.main(PortCheck.java:11)





3. 오류가 발생하지 않으면 방화벽도 열려있고 해당 포트도 리스닝하고 있는 상태입니다.





- 아래는 소스 파일 입니다. -


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
 
public class PortCheck {
  public static void main(String[] args) throws UnknownHostException, IOException {
    SocketAddress endpoint =  new InetSocketAddress(args[0], Integer.valueOf(args[1]));
    new Socket().connect(endpoint, 3000);
    System.out.println("OK");
  }
}
 



반응형
반응형

오라클에서 랜덤 값을 얻고 싶을 떄 다음 함수를 사용하시면 됩니다.


1
2
3
4
SELECT DBMS_RANDOM.VALUE(100999FROM DUAL;
 
/* 결과 값 */
702.22957428384113427610228168428560622



결과 값을 그대로 쓰기에는 아름답지 않습니다. 정수로 받으려면 반올림을 한번 해 드립니다.


1
2
3
4
SELECT ROUND(DBMS_RANDOM.VALUE(100999),0FROM DUAL;
 
/* 결과 값 */
492



결과 값이 조금 아름다워 졌습니다.



반응형
반응형

spring boot 를 사용하면서 Local에서 STS를 이용해 서버를 실행시킬 때 application.properties 에 아래처럼 선언해주면 context path를 변경할 수 있습니다.


1
server.contextPath=/op



SpringBoot 2.x 부터 위 설정은 Deprecated 되었습니다.


2.x 는 아래와 같이 쓰시면 됩니다.


server.servlet.context-path=/op


반응형

+ Recent posts