View 정렬 방법(Vertical, Horizontal, Bottom, Top 등)

6. gravity : 자식뷰의 중력을 결정(Layout 에서 설정).. 중력이란 화면의 어느쪽에 정렬할 것인가? start, end, top, bottom, center, centerHorizontal, CenterVertical , |(파이프란인) 으로 여러 속성을 동시 설정가능

layout_gravity : 자식 뷰 각각의 중력을 결정... 자식 뷰(View에서 설정)에서 정의한다.

7. VIEW

View 객체들 배치 방법

8. 특정 View 간의 위치 배치
- 특정 뷰를 같이 배치하고자 할때, res/layout/activity_main.xml(해당 레이아웃 XML파일)의 뷰(EditView, Button, ImageView 등)에 아래와 같이 속성을 정의 한다.

layout_above="@id/[아이디]"
layout_toRightOf="@id/[아이디]"
layout_toEndOf="@id/[아이디]"
layout_toLeftOf="@id/[아이디]"
layout_toStartOf="@id/[아이디]"
layout_below="@id/[아이디]"

9. ConstraintLayout : 마지막에 나온 Layout으로, 제한(규칙)을 붙일 수 있는 레이아웃이다. 아래에 보면, 뷰들간에 속성을 정의할 수 있도록 되어 있다. 또한 이미지뷰를 상단에 꽉 채우려면, 여백을 0으로 설정하고, layout_widthmatch_constraints 속성을 준다. match_constraints 속성은 LinearLayout의 가중치(weight) 속성과 비슷. layout_width0dp로 주고, 좌우를 꽉 채울 때 사용.

--app:layout_constraintStart_toStartOf="[parent|다른뷰의 id]" : 현재 뷰의 왼쪽과 부모나 다른뷰의 왼쪽을 붙임
--app:layout_constraintEnd_toEndOf="[parent|다른뷰의 id]" : 현재 뷰의 오른쪽과 부모나 다른뷰의 오른쪽을 붙임
--app:layout_constraintTop_toTopOf="[parent|다른뷰의 id]" : 현재 뷰의 위쪽과 부모나 다른뷰의 위쪽을 붙임


...................

 

 

Posted by 목표를 가지고 달린다
,

기본 VIew 객체의 주요 속성(TextView, layout_weight 등)

1. TextView 속성

android:lines="1" -- 줄 수 지정
android:ellipsize="end" -- 줄수 지정에 따라, 글을 다 표현하지 못할 때, "아름다운 강산에 ..." 처럼 "..."로 표현함.
android:maxLines : 최대 표시줄 수 지정
android:minLines : 최소 표시줄 수 지정
android:textColor="#FF0000"
android:textStyle="bold|italic"

2. EditView 속성

android:hint="빈칸일 경우 표시할 문구"
android:inputType="textPassword" -- 입력 속성(textPassword, phone, textWebEmailAddress, number, numberPassword, time, date, datetime, numberDecimal, numberSigned
android:textAllCaps="true" -- 대문자 활성화

3. ImageView 속성

android:scaleType="fitXY"
-- 여백에 대해 이미지처리 방식으로, matrix(자바코드로 setMatrix()메소드에서 객체를 지정하여 회전, 확대/축소를 런타임에 할 수있음
-- fitXY : 가로세로에 이미지를 꽉 채움
-- fitStart : 비율을 유지하며 꽉채우는데, 여백이 있으면 시작 지점으로 정렬한다.
--fitCenter : (기본값) 비유을 유지하고 가운데 정렬
--fitEnd : 비율을 유지하고 여백이 있으면 끝에 정렬
--Center : 뷰보다 이미지가 클 때, 원본 크기를 유지하고 중앙을 위주로 표시한다.
--centerCrop : 뷰에 여백이 생기지 않도록 이미지가 확대/축소되며, 중앙 위주로 표시하고 남은 부분은 잘라낸다.(유용)
--centerInside

4. 기타 View
ProgressBar, SearchView, Spinner, CheckBox, RadioButton, RatingBar(별점 표시),

Switch(좌/우로 드래그하는 On/Off), SeekBar(핸들을 드래그해서 상태를 표시할 수있는 뷰)
<RadioGroup>
<RadioButton />
</RadioGroup>

<RatingBar
android:style="android:attr/ratingBarStyleSmall"
android:numStars="5"
android:rating="2.5"
android:stepSize="0.5" />

<SeekBar
android:max="100"
android:progress="20" />

<SearchView
android:iconifiedByDefault="true" -- "false"
/>

<ProgressBar
android:style="@style/Widget.AppCompat.ProgressBar" />

<ProgressBar
android:style="@style/Widget.AppCompat.ProgressBar.Horizontal" />

5. LinearLayout

--android:layout_height="0dp"
--android:layout_weight="1" -- height를 반드시 0으로 설정하고, 가중치를 이용하여 View간에 비율로 크기 설정 가능

6. gravity : 자식뷰의 중력을 결정(Layout 에서 설정).. 중력이란 화면의 어느쪽에 정렬할 것인가? start, end, top, bottom, center, centerHorizontal, CenterVertical , |(파이프란인) 으로 여러 속성을 동시 설정가능

layout_gravity : 자식 뷰 각각의 중력을 결정... 자식 뷰(View에서 설정)에서 정의한다.

 

 

 

Posted by 목표를 가지고 달린다
,

코딩의 진정한 고수란 누구인가?

 

IT개발자가 일을 잘 한다는 것은 무엇일까?

국가 정보시스템 감리에서는 사업(일)을 할 때,

기능성(내용이 충분하고 완전함), 무결성(내용이 정확함), 편의성(이해 및 활용의 편의), 안정성(테스트 결과서), 보안성, 효율성(성능향상), 준거성, 일괄성을 요구한다.

쓸데 없이 기교를 부리거나, 도전의식으로 새로운 것(익숙치 않거나 이용하기 어려운 라이브러리 등)을 행하는 것은 업무에 중요하지 않다.

개발을 할때, 업무 요건와 프로세스를 단순화하여 개발 및 유지보수가 용이하게 설계한 후,
적절하게 DB의 SQL문과 AP의 Coding에서 기능을 구현하는 것이 개발자의 능력의 척도이다.

어줍잖은 실력으로 오라클의 통계함수나 rollup, cube 등을 쓰는 것보다 때로는 union 으로 2번 읽는 것이 유지보수가 쉽고 남들도 해당 업무 파악이 쉬울 수도 있다.(물론 약간의 성능저하는 있을 수 있으나, 거래가 많지 않다면 무시)

그렇다고 무식하게 코딩하라는 것이 아니다.

적절하게 기술을 발휘하라는 말이다.

 

 

Posted by 목표를 가지고 달린다
,

DB관련 유용한 사이트 모음


모든 문제 해결은 누군가에게 물어보기 보다는, 직접 찾아보고 해결책을 강구하는 것이 좋으며, 문제 해결은 이슈해결과 더불어 향후 재발방지를 위한 조치까지 확인해야 한다.
개발자라 하더라도, DB는 시스템 부분과 DB 아키텍쳐까지 이해해야 성능(튜닝)부터 운영까지 효율적으로 설계할 수 있으니, 틈틈히 보거나 문제 생겼을 때, 운영유지보수팀에 문의하면서 같이 고민해 보길 바란다.

[ORACLE]

prodba 네이버 카페 | DBMS 전반
https://cafe.naver.com/prodba

dbian 네이버 카페 | 튜닝
https://cafe.naver.com/dbian

조동욱님 블로그 | DBMS 전반
http://ukja.tistory.com

유건데이타 자료실 | DBMS 전반
http://dbtech.co.kr/bbs/?bo_c=10

구루비 | DBMS 전반
http://www.gurubee.net/

구루비 스터디 | DBMS 전반
http://wiki.gurubee.net/dashboard.action

아무도없는세계님 블로그 | DBMS 전반
http://dinggur.tistory.com

BlueOne | DB사업팀 | DBMS 전반
http://otsteam.tistory.com

DBWORKS_oracle | DBMS 전반
http://support.dbworks.co.kr/index.php?mid=ora_tb

투씨에스지 기술블로그 | DBMS 전반
http://tocsg.tistory.com/

굿어스 DB기술노트 | DBMS 전반
http://blog.goodus.com/category/Good%20Tech

DBA의 정석 | DBMS 전반
http://haisins.epac.to/

내맘대로 긍정 | DBMS 전반
http://positivemh.tistory.com/

데이터포럼 | 설치 가이드
http://dataforum.kr/display/INSTALL

Posted by 목표를 가지고 달린다
,

이중화된 오라클의 DB 가동 명령어

# 클러스터 상태 확인 : crsctl check crs

# 클러스터에 등록된 자원 정보 확인 : crsctl stat res -t

# 오라클 기동 : crsctl start crs
- (주의)startup 등 단일 인스턴스와는 명령어가 다름

클러스터 상태 확인 후, 오라클을 기동하고, 클러스터 자원 정보를 확인!!!!
상세한 내용은 아래를 참조하시기 바랍니다.

* 서버 재구동시, 오라클 역시 자동으로 reboot되게 하려며,
crsctl disable crs * => rebooting 후 crs가 자동 시작되는 것을 disable
crsctl enable crs* => rebooting 후 crs가 자동 시작되는 것을 enable
crsctl config crs* => crs 설정 상태 확인


# 클러스터 상태 확인

crsctl check crs

vmgdb01n:/ORACLE> crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

# 클러스터에 등록된 자원 정보 확인

crsctl status res[ource] -t

vmgdb01n:/ORACLE> crsctl status resource -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
ONLINE ONLINE vmgdb01n
ONLINE ONLINE vmgdb02n
ora.gsd
OFFLINE OFFLINE vmgdb01n
OFFLINE OFFLINE vmgdb02n
ora.net1.network
ONLINE ONLINE vmgdb01n
ONLINE ONLINE vmgdb02n
ora.ons
ONLINE ONLINE vmgdb01n
ONLINE ONLINE vmgdb02n
ora.registry.acfs
OFFLINE OFFLINE vmgdb01n
OFFLINE OFFLINE vmgdb02n
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cvu
1 ONLINE ONLINE vmgdb01n
ora.oc4j
1 ONLINE ONLINE vmgdb01n

ora.vmg.db
1 ONLINE ONLINE vmgdb01n Open
2 ONLINE ONLINE vmgdb02n Open
ora.vmgdb01n.vip
1 ONLINE ONLINE vmgdb01n
ora.vmgdb02n.vip
1 ONLINE ONLINE vmgdb02n

 

olsnodes -n -i

òvmgdb01n:/ORACLE> olsnodes -n -i
vmgdb01n 1 vmgdb01n-vip
vmgdb02n 2 vmgdb02n-vip

 

crsctl query css votedisk

vmgdb01n:/ORACLE> crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 97a1ccd5f7ca4f9ebf9ca9e23420e74a (/dev/raw/raw1) []
2. ONLINE 0ce6ebddc2764f97bfceaff24edc388e (/dev/raw/raw2) []
3. ONLINE ad28933487d24f09bf37169b8c67d786 (/dev/raw/raw3) []
Located 3 voting disk(s).

 

ocrcheck

vmgdb01n:/ORACLE> ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2884
Available space (kbytes) : 259236
ID : 560703319
Device/File Name : /dev/raw/raw4
Device/File integrity check succeeded
Device/File Name : /dev/raw/raw5
Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check bypassed due to non-privileged user

crsctl get css disktimeout

crsctl get css misscount

crsctl get css reboottime

vmgdb01n:/ORACLE> crsctl get css disktimeout
CRS-4678: Successful get disktimeout 200 for Cluster Synchronization Services.
vmgdb01n:/ORACLE> crsctl get css misscount
CRS-4678: Successful get misscount 30 for Cluster Synchronization Services.
vmgdb01n:/ORACLE> crsctl get css reboottime
CRS-4678: Successful get reboottime 3 for Cluster Synchronization Services.

 

### crsctl 명령어 도움말

crsctl -h
Usage: crsctl add - add a resource, type or other entity
crsctl check - check a service, resource or other entity
crsctl config - output autostart configuration
crsctl debug - obtain or modify debug state
crsctl delete - delete a resource, type or other entity
crsctl disable - disable autostart
crsctl discover - discover DHCP server
crsctl enable - enable autostart
crsctl get - get an entity value
crsctl getperm - get entity permissions
crsctl lsmodules - list debug modules
crsctl modify - modify a resource, type or other entity
crsctl query - query service state
crsctl pin - pin the nodes in the node list
crsctl relocate - relocate a resource, server or other entity
crsctl replace - replaces the location of voting files
crsctl release - release a DHCP lease
crsctl request - request a DHCP lease
crsctl setperm - set entity permissions
crsctl set - set an entity value
crsctl start - start a resource, server or other entity
crsctl status - get status of a resource or other entity
crsctl stop - stop a resource, server or other entity
crsctl unpin - unpin the nodes in the node list
crsctl unset - unset an entity value, restoring its default

조금더 자세히...

#DB node 확인

srvctl status database -d <db_unique_name>
srvctl start database -d <db_unique_name>
srvctl config database -d 디비명
srvctl config nodeapps -a -g -s

#listener 확인

srvctl status scan_listener
srvctl config scan_listener

4.cluster
- 시작

$ srvctl start instance -d <db_unique_name> -i <인스턴스명>
$ srvctl start asm -n 노드명
$ srvctl start nodeapps -n 노드명


-종료

$ srvctl stop instance -d <db_unique_name> -i <인스턴스명>
$ srvctl stop asm -n 노드명
$ srvctl stop nodeapps -n 노드명

 

Posted by 목표를 가지고 달린다
,

오라클의 통계정보를 활용하면, 데이터의 건수 및 디스크 사이즈를 쉽게 확인할 수있다.

아래의 쿼리를 실행하면, 쉽게 전체 테이블별 건수 및 용량을 쉽게 체크할 수 있다.
(참고로 Block의 사이즈는 8k, 16k 등 테이블 생성시 별도로 정할 수 있어서 확인 필요)

실제 추출되는 정보는 통계정보를 수행한 (Analyze)한 결과이므로, 실제 select count(*) 결과와는 다르다.
통계정보는 analyze한 시점의 정보이기 때문이다. 하지만 전체량을 확인코자 할 때, 약간의 오차 보다는 큰 틀에서 정보를 확인하는 것이 효율적이다.

특히, 주기적으로 삭제하는 테이블의 block을 보면 특이점이 있다.
분명히 많은 정보를 지웠음에도 불구하고, block이 많다. 그리고 full scan을 할 경우 너무 느리다.
그것을 delete의 한계 때문이다. delete를 할지라도 실제 최대로 할당 되었던 block을 반환하고 재구성하지 않기 때문에 차지하는 공간은 여전히 넓다. 필요하다면 테이블 재구성(rebuild 또는 shrink)를 해야 하겠지만, 온라인 상태인 경우 테이블의 lock되는 등 서비스가 일시 정지될 우려가 있으니 충분히 고려하길 바란다.

추가로, 통계정보를 갱신하기 위해 analyze할 경우 반드시 서버에 접속하여 topas로 서버의 상태를 모니터링하고 수행하기 바란다.

-------------------------------------------------------------------------------------------

테이블명 규칙이 테이블의 명령 규칙이 : T + 업무명(2자리) + 유니크한 이름
EX) TOK_DFSFSDFWER, TQA_DSFSKFSF 등

SELECT TA.*, TB.NUM_ROWS 레코드수
FROM
(
SELECT SUBSTR(SEGMENT_NAME, 2,2) AS UPMU, SEGMENT_NAME, C.COMMENTS, ROUND(SUM(A.BYTES)/8/1024) BLOCK수
FROM DBA_SEGMENTS A, DBA_TABLES B, ALL_TAB_COMMENTS C
WHERE A.SEGMENT_NAME = B.TABLE_NAME
AND A.SEGMENT_TYPE IN ('TABLE','TABLE PARTITION')
AND A.OWNER = '홍길동'
AND A.SEGMENT_NAME LIKE 'T%' -- 테이블의 명령 규칙이 T + 업무명(2자리) + 유니크한 이름 인 경우...
AND A.SEGMENT_NAME = C.TABLE_NAME
AND C.TABLE_TYPE IN ('TABLE','TABLE PARTITION')
GROUP BY SUBSTR(SEGMENT_NAME, 2,2), SEGMENT_NAME, C.COMMENTS
) TA,
DBA_TABLES TB
WHERE
TA.SEGMENT_NAME = TB.TABLE_NAME
ORDER BY 1,2
Posted by 목표를 가지고 달린다
,

개발자가 실제 해당 명령어를 수행하는 경우는 드물다. 

통상 DML(Insert, Update, Delete)와 Select 외에는 구축 단계에서 Create table/index 정도?

실제 운영중에

1. 파티션 드랍 > Truncate table TCCL_DATA(테이블명) drop p201902(파티션명).      

2. 테이블 드랍 > Truncate table TCCL_DATA

2경우일텐데, 로그테이블의 경우 과거  테이블은 추가 적재가 없으니, 우려가 안될텐데, 혹시나 운영중인 테이블의 drop에대해 혹시 lock이 발생하지 않을까 우려하는 사람을 위해 적는다.

TRUNCATE TABLE 은 DDL이다. 즉, 데이터를 삭제하는게 아니라 해당 테이블을 새로 만든다고 생각하면 된다. 그러면 테이블이 재구성되기 때문에, 삭제로 인한 아카이브로그 파일이 커지거나 데이터 량에 따른 시간이 필요하지 않다.

5억건의 데이터를 truncate 하는데 걸리는 시작은 "즉시" 이다. 3초? 5초? 아니..즉시 바로 처리된다

truncate 로 인한 테이블의 lock은 걱정하지 말자. 

 

 

Posted by 목표를 가지고 달린다
,

왜 우리는 형상관리 시스템을 도입해야 하는가? 단순 협업?

그렇다면, 굳이 유료 제품을 사용해서 사용하는 이유는??

목적과 현장에 대한 이해가 부족하다면 실패하기 쉬운게 형상관리 시스템이다.

최근 형상관리에는 단순한 소스 버전 관리외에도 시큐어코딩 점검, 취약점 분석툴 등을 적절히 조합하여 운영하는 것이 대세이다.

1) 과거 소스관리를 "대장(종이문서)"로 관리하던 시절이 있었다. 그것을 전산화할 경우 별도로 대장관리를 하지 않아도 되어 소스 관리 프로그램이 주목받기 시작했으며, 2) 서버에서 소스관리하지 않고, 로컬에서 개인PC에서 개발하고, 최종 Object 파일만 운영에 배포하여 관리하다 보니 직무 변경(인사 이동)으로 소스를 잘 넘겨주는 것도 중요해졌다. 3) 대규모 시스템은 운영하다보면, 과거의 누군가의 코딩이 큰 부정적인 영향을 미칠 때, 책임자를 찾을 필요가 했다. 4) 대규모 시스템은 이중화 삼중화를 넘어 20대가 넘는 서버를 운용하다보니, 일괄 배포 시스템이 필요했다.

5) 물론, 소스를 임의로 수정하여 부정거래를 추적하기 위해 필요하기도 하지만 그것이 주요 도입취지는 아닐 것이다.

어쨌뜬, 임의 수정이 아니라 이슈 등록(업무 보고) 부터 개발 ~ , 취약점점검, 시큐어코딩 점검, 이행(승인절차 포함) 까지는 일련의 IT프로세스이다.

하지만 우리는 형상관리를 도입하면 업무 효율이 40%이하 저하되는 것을 염려해야 한다. 직접 소스를 ftp로 옮기는 것이 아니라, 형상을 타고 매번 시큐어코딩 점검을 하다보면 느리다... 정말 느리다...

하지만 필요하다. 그래서 현실에 맞는 절차를 도입하기 위해 고민하고 노력해야 한다. 특히 개발자의 의견을 최대한 듣고 존중해 줘야 한다. 만약 도입 이후, 기존대로 직접 소스를 배포한다면 결국 개인PC의 소스가 최종본이기에 형상시스템은 무용지물이될 것이다.

많은 도입 사례를 조사하고, 고민하길 바란다.

'개발자 넋두리' 카테고리의 다른 글

성숙한 조직, 테슬라의 미래  (0) 2023.04.18
Posted by 목표를 가지고 달린다
,